[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