We've just started porting DAL layer to the MonoTouch and facing some
problems. The first one is that we can't deserialize Dictionary<string,
object>

We have a structure:

namespace  WinFormsTestApp  {
[DataContract(Namespace = "WinFormsTestApp")]
public class TstResponse
{
    [DataMember]
    public Dictionary<string, object> MapAttrToValue = new
Dictionary<string, object>();
}
}

and deserialization (works on WinForms) fails on Monotouch with
NullReferenceException.
Is it a limitation of ios (may be object deserialization requires dynamic
compilation?) or just a bug in MT?

Thanks!

The full "repro" (including the class above):

var text =
@"<?xml version=""1.0"" encoding=""utf-16""?> <TstResponse
xmlns=""WinFormsTestApp"" xmlns:i=""
http://www.w3.org/2001/XMLSchema-instance"";> <MapAttrToValue xmlns:a=""
http://schemas.microsoft.com/2003/10/Serialization/Arrays"";>
<a:KeyValueOfstringanyType> <a:Key>AppMachineName</a:Key> <a:Value
i:type=""b:string"" xmlns:b=""http://www.w3.org/2001/XMLSchema"";>prod</a:Value>
</a:KeyValueOfstringanyType></MapAttrToValue></TstResponse>";

var serializer = new DataContractSerializer(typeof(TstResponse));

using (var xmlReader = XmlReader.Create(new StringReader(text)))
{
    var result = serializer.ReadObject(xmlReader);
    var q = 1;
}

And the exception stacktrace

at System.Xml.Linq.XElement.GetNamespaceOfPrefix (System.String prefix)
[0x0001f] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Xml.Linq/System.Xml.Linq/XElement.cs:735

at System.Xml.Linq.XNodeReader.LookupNamespace (System.String prefix)
[0x00033] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Xml.Linq/System.Xml.Linq/XNodeReader.cs:329

at System.Xml.XmlSimpleDictionaryReader.LookupNamespace (System.String
prefix) [0x00000] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Xml/XmlSimpleDictionaryReader.cs:287

at System.Runtime.Serialization.XmlFormatterDeserializer.Deserialize
(System.Type type, System.Xml.XmlReader reader) [0x00112] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:149

at System.Runtime.Serialization.DictionaryTypeMap.DeserializeContent
(System.Xml.XmlReader reader,
System.Runtime.Serialization.XmlFormatterDeserializer deserializer,
System.String id) [0x00077] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:873

at System.Runtime.Serialization.SerializationMap.DeserializeObject
(System.Xml.XmlReader reader,
System.Runtime.Serialization.XmlFormatterDeserializer deserializer)
[0x0003a] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:264

at System.Runtime.Serialization.XmlFormatterDeserializer.DeserializeByMap
(System.Xml.XmlQualifiedName name, System.Type type, System.Xml.XmlReader
reader) [0x000d3] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:257

at System.Runtime.Serialization.XmlFormatterDeserializer.Deserialize
(System.Type type, System.Xml.XmlReader reader) [0x002e3] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:199

at System.Runtime.Serialization.SerializationMap.DeserializeContent
(System.Xml.XmlReader reader,
System.Runtime.Serialization.XmlFormatterDeserializer deserializer,
System.String id, Boolean empty) [0x00217] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:347

at System.Runtime.Serialization.SerializationMap.DeserializeContent
(System.Xml.XmlReader reader,
System.Runtime.Serialization.XmlFormatterDeserializer deserializer,
System.String id) [0x00000] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:292

at System.Runtime.Serialization.SerializationMap.DeserializeObject
(System.Xml.XmlReader reader,
System.Runtime.Serialization.XmlFormatterDeserializer deserializer)
[0x0003a] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:264

at System.Runtime.Serialization.XmlFormatterDeserializer.DeserializeByMap
(System.Xml.XmlQualifiedName name, System.Type type, System.Xml.XmlReader
reader) [0x000d3] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:257

at System.Runtime.Serialization.XmlFormatterDeserializer.Deserialize
(System.Type type, System.Xml.XmlReader reader) [0x002e3] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:199

at System.Runtime.Serialization.XmlFormatterDeserializer.Deserialize
(System.Xml.XmlReader reader, System.Type declaredType,
System.Runtime.Serialization.KnownTypeCollection knownTypes,
IDataContractSurrogate surrogate,
System.Runtime.Serialization.DataContractResolver resolver,
System.Runtime.Serialization.DataContractResolver defaultResolver,
System.String name, System.String ns, Boolean verifyObjectName) [0x0007e]
in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlFormatterDeserializer.cs:65

at System.Runtime.Serialization.DataContractSerializer.ReadObject
(System.Xml.XmlDictionaryReader reader, Boolean verifyObjectName) [0x00024]
in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/DataContractSerializer.cs:350

at System.Runtime.Serialization.XmlObjectSerializer.ReadObject
(System.Xml.XmlDictionaryReader reader) [0x00000] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlObjectSerializer.cs:74

at System.Runtime.Serialization.DataContractSerializer.ReadObject
(System.Xml.XmlReader reader) [0x00000] in
/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/DataContractSerializer.cs:335

at
DPTech.ToolSelector.UI.Ios.MainViewController+<ViewDidLoad>c__AnonStorey0.<>m__3
(System.Object sender, System.EventArgs e) [0x000a2] in
/Users/User/Projects/v5/DPTech.ToolSelector.UI.Ios/MainViewController.cs:106

at MonoTouch.UIKit.UIControlEventProxy.Activated () [0x00000] in
/Developer/MonoTouch/Source/monotouch/src/UIKit/UIControl.cs:30
at (wrapper managed-to-native)
MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String
principalClassName, System.String delegateClassName) [0x0004c] in
/Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to