[Mono-devel-list] Reflection exception
Herscovici, Avi
AHerscovici at Empirix.com
Thu Jun 26 17:21:08 EDT 2003
I got the latest code from CVS (thanks Lluis) and it fixed a lot of
serialization things, but now I get an ambiguous matching error from
calling the XmlSerializer constructor. Our code is complex (compiles in
.Net fine) but I've narrowed it to what seems to be a problem with
reflection and overloaded functions/properties. I've stripped my code down
to the bare minimum to illustrate what happens. Again, I'd be willing to
work on this problem if no one has a quick fix or wants to take it up.
Here's the code (to get rid of the problem I have to comment out all
overloaded Add functions and this properties and only leave the ones with a
single parameter. Also the implementation of the methods/properties in
script.cs is irrelevant.):
// ------------------------------------------ file1.cs
------------------------------------
using System;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
using Scripts;
namespace Serial.test {
public class sertest {
public static void Save(System.IO.Stream stream, object x)
{
XmlSerializer ser = new
XmlSerializer(typeof(Script));
ser.Serialize(stream, x);
}
public static void Save(string filename, object x)
{
FileStream str = new FileStream(filename,
FileMode.Create, FileAccess.Write);
Save(str, x);
str.Close();
}
public static object Load(System.IO.Stream stream)
{
object s;
Console.WriteLine("Debug line 1a");
XmlSerializer ser = new
XmlSerializer(typeof(Script));
Console.WriteLine("Debug line 2a");
// try {
s = (object)ser.Deserialize(stream);
// }
// catch (Exception e) {Console.WriteLine("Exception: "
+ e);}
// s = null;
return s;
}
public static object Load(string filename)
{
object s;
Console.WriteLine("Debug line 2");
FileStream str = new FileStream(filename,
FileMode.Open, FileAccess.Read);
Console.WriteLine("Debug line 3");
s = Load(str);
Console.WriteLine("Debug line 4");
str.Close();
return s;
}
static void Main() {
string filename = "test.ser";
Script x = new Script();
Save(filename, x);
Script temp = (Script)Load(filename);
Console.WriteLine("Finished");
}
}
}
// ------------------------------- Script.cs
----------------------------------
using System;
using System.Collections;
namespace Scripts
{
public class Script: CollectionBase, ICloneable
{
public Script()
{
}
public Script(Script p)
{
}
public object Clone()
{
return new Script(this);
}
public void Add(object p)
{
InnerList.Add(p);
}
public void Add(string name, object value)
{
Add(new object());
}
public void Add(string[] names, string[] values)
{
}
public void Add(Script collection)
{
}
public object this[int index]
{
get
{
return (object)InnerList[index];
}
set
{
InnerList[index] = value;
}
}
public string this[string name]
{
get
{
return this[name, true];
}
set
{
int index = 0;
if(index != -1)
{
this[index] = new object();
}
else
{
Add(name, value);
}
}
}
public string this[string name, bool ignoreCase]
{
get
{
return null;
}
}
}
}
// ------------------- END --------------------------------------------
Here's the error:
Unhandled Exception: System.Reflection.AmbiguousMatchException: Ambiguous
matching in method resolution
in <0x00148> 00 System.MonoType:GetMethodImpl
(string,System.Reflection.BindingFlags,System.Reflection.Binder,System.Refle
ction.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]
)
in <0x0005a> 00 System.Type:GetMethod (string)
in <0x000bd> 00 System.Xml.Serialization.TypeData:get_ListItemType ()
in <0x000eb> 00
System.Xml.Serialization.XmlReflectionImporter:ImportListMapping
(System.Type,System.Xml.Serialization.XmlRootAttribute,string,System.Xml.Ser
ialization.XmlAttributes,int)
in <0x0013d> 00
System.Xml.Serialization.XmlReflectionImporter:ImportTypeMapping
(System.Type,System.Xml.Serialization.XmlRootAttribute,string)
in <0x000fa> 00 System.Xml.Serialization.XmlSerializer:.ctor
(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],Sy
stem.Xml.Serialization.XmlRootAttribute,string)
in <0x00021> 00 System.Xml.Serialization.XmlSerializer:.ctor (System.Type)
in <0x0002d> 00 Serial.test.sertest:Save (System.IO.Stream,object)
in <0x00049> 00 Serial.test.sertest:Save (string,object)
in <0x00049> 00 Serial.test.sertest:Main ()
More information about the Mono-devel-list
mailing list