[Mono-bugs] [Bug 685042] New: Thrown exception when serializing a class that implements from IDictionary using DataContract
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Mon Apr  4 18:41:02 EDT 2011
    
    
  
https://bugzilla.novell.com/show_bug.cgi?id=685042
https://bugzilla.novell.com/show_bug.cgi?id=685042#c0
           Summary: Thrown exception when serializing a class that
                    implements from IDictionary using DataContract
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.6.x
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: WCF
        AssignedTo: atsushi at ximian.com
        ReportedBy: nate0001 at msn.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---
User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.16)
Gecko/20110323 Ubuntu/10.10 (maverick) Firefox/3.6.16
If a class is implementing IDictionary (and possibly other ICollection
classes), attempts at serializing the data with a DataConstruct serializer it
will throw an exception or plain not work. The exception is below.
Unhandled Exception: System.Runtime.Serialization.SerializationException: There
was an error during serialization for object of type
AIR.Collections.EventDictionary`2[System.String,System.String] --->
System.ArgumentException: method arguments are incompatible
  at System.Delegate.CreateDelegate (System.Type type, System.Object
firstArgument, System.Reflection.MethodInfo method, Boolean throwOnBindFailure,
Boolean allowClosed) [0x00349] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/corlib/System/Delegate.cs:264 
  at System.Delegate.CreateDelegate (System.Type type,
System.Reflection.MethodInfo method, Boolean throwOnBindFailure) [0x00000] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/corlib/System/Delegate.cs:273 
  at System.Delegate.CreateDelegate (System.Type type,
System.Reflection.MethodInfo method) [0x00000] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/corlib/System/Delegate.cs:278 
  at System.Reflection.MonoProperty.CreateGetterDelegate
(System.Reflection.MethodInfo method) [0x00068] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/corlib/System.Reflection/MonoProperty.cs:287 
  at System.Reflection.MonoProperty.GetValue (System.Object obj,
System.Object[] index) [0x00058] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/corlib/System.Reflection/MonoProperty.cs:304 
  at System.Runtime.Serialization.Json.TypeMapProperty.GetMemberOf
(System.Object owner) [0x00000] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/TypeMap.cs:297 
  at System.Runtime.Serialization.Json.TypeMap.Serialize
(System.Runtime.Serialization.Json.JsonSerializationWriter outputter,
System.Object graph, System.String type) [0x00023] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/TypeMap.cs:180 
  at
System.Runtime.Serialization.Json.JsonSerializationWriter.WriteObjectContent
(System.Object graph, Boolean top, Boolean outputTypeName) [0x004bc] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonSerializationWriter.cs:146 
  at
System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObjectContent
(System.Xml.XmlWriter writer, System.Object graph) [0x00000] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs:243 
  at System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject
(System.Xml.XmlWriter writer, System.Object graph) [0x00008] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs:208 
  --- End of inner exception stack trace ---
  at System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject
(System.Xml.XmlWriter writer, System.Object graph) [0x00023] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs:215 
  at System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject
(System.Xml.XmlDictionaryWriter writer, System.Object graph) [0x00000] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs:221 
  at System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject
(System.IO.Stream stream, System.Object graph) [0x00007] in
/home/ntomsic/Downloads/build/mono-2.10.1/mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs:201 
  at AIR.MainClass.Main (System.String[] args) [0x00028] in
/home/ntomsic/Projects/AIR/AIR/Main.cs:38
This happens on all releases.
Reproducible: Always
Steps to Reproduce:
1. Create a generic class that inherits from IDictionary<TKey, TValue>
public class MyDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
    ...
}
2. In main class, create a MyDictionary object, add an element, and serialize.
using System;
using System.IO;
using System.Runtime.Serialization.Json;
public class MainClass
{
    public static void Main(string[] args)
    {
        MyDictionary<string, string> dict = new MyDictionary<string, string>();
        dict.Add("key", "value");
        var serializer = new DataContractJsonSerializer(dict.GetType());
        var stream = new MemoryStream();
        serializer.WriteObject(stream, dict);
        stream.Position = 0;
        var reader = new StreamReader(stream);
        Console.WriteLine(reader.ReadToEnd());
    }
}
3. Compile and run.
Actual Results:  
Running gives the exception above.
Expected Results:  
[{"Key":"key","Value":"value"}]
This works on Windows with .NET.
-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
    
    
More information about the mono-bugs
mailing list