[Mono-devel-list] Reflection exception

Lluis Sanchez lluis at ideary.com
Fri Jun 27 20:55:22 EDT 2003


Ok, fixed in CVS

----- Original Message ----- 
From: "Lluis Sanchez" <lluis at ideary.com>
To: "Herscovici, Avi" <AHerscovici at Empirix.com>;
<mono-devel-list at lists.ximian.com>
Sent: Friday, June 27, 2003 1:55 PM
Subject: Re: [Mono-devel-list] Reflection exception


> Hi!
>
> It has an easy fix. I'll try to fix it today.
>
> - Lluis
>
> ----- Original Message ----- 
> From: "Herscovici, Avi" <AHerscovici at Empirix.com>
> To: <mono-devel-list at lists.ximian.com>
> Sent: Thursday, June 26, 2003 11:21 PM
> Subject: [Mono-devel-list] Reflection exception
>
>
> > 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 ()
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list at lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>




More information about the Mono-devel-list mailing list