Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcos Henrich <marcoshenrich@gmail.com>2016-03-30 13:57:56 +0300
committerMarcos Henrich <marcoshenrich@gmail.com>2016-03-30 13:57:56 +0300
commitff49850dfc18f5991246a203184fa1e0b8a7c7ab (patch)
treec26d781eee044f616e08bd9dd7e8aa341d215812 /mcs/class/System.Runtime.Serialization
parentf41e857d3fef58b944e1523f0ee9a97b4f142468 (diff)
parent8a1e9242f6d25e408644d0339dcf5c222d95671d (diff)
Merge pull request #2698 from esdrubal/iosxmlarray
[System.Runtime.Serialization] Static writer fix.
Diffstat (limited to 'mcs/class/System.Runtime.Serialization')
-rw-r--r--mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs12
-rw-r--r--mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/DataContractSerializerTest.cs12
2 files changed, 20 insertions, 4 deletions
diff --git a/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs b/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs
index fdbcc77c5ba..f0b6d8d669a 100644
--- a/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs
+++ b/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs
@@ -507,11 +507,15 @@ namespace System.Runtime.Serialization
} else {
var typeHandleValue = Type.GetTypeHandle (memberValue);
var isDeclaredType = typeHandleValue.Equals (CodeInterpreter.ConvertValue (memberValue, memberType, Globals.TypeOfObject));
- if (isNullableOfT)
+ if (isNullableOfT) {
ctx.InternalSerialize (writer, memberValue, isDeclaredType, writeXsiType, DataContract.GetId (memberType.TypeHandle), memberType.TypeHandle);
- else
- ctx.InternalSerializeReference (writer, memberValue, isDeclaredType, writeXsiType, DataContract.GetId (memberType.TypeHandle), memberType.TypeHandle);
- //InternalSerialize((isNullableOfT ? XmlFormatGeneratorStatics.InternalSerializeMethod : XmlFormatGeneratorStatics.InternalSerializeReferenceMethod), () => memberValue, memberType, writeXsiType);
+ } else if (memberType == Globals.TypeOfObject) {
+ var dataContract = DataContract.GetDataContract (memberValue.GetType());
+ writer.WriteAttributeQualifiedName (Globals.XsiPrefix, DictionaryGlobals.XsiTypeLocalName, DictionaryGlobals.SchemaInstanceNamespace, dataContract.Name, dataContract.Namespace);
+ ctx.InternalSerializeReference (writer, memberValue, false, false, -1, typeHandleValue);
+ } else {
+ ctx.InternalSerializeReference (writer, memberValue, isDeclaredType, writeXsiType, DataContract.GetId (memberType.TypeHandle), memberType.TypeHandle);
+ }
}
}
}
diff --git a/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/DataContractSerializerTest.cs b/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/DataContractSerializerTest.cs
index ada461fe2b8..89c0bef1b55 100644
--- a/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/DataContractSerializerTest.cs
+++ b/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/DataContractSerializerTest.cs
@@ -122,5 +122,17 @@ namespace MonoTests.System.Runtime.Serialization
Assert.IsTrue (s.Contains ("<Flags>All</Flags>"));
}
}
+
+ // Bug #37116
+ [Test]
+ public void KeyPairOfAny ()
+ {
+ var dict = new Dictionary<string, object> ();
+ dict.Add ("test", new List<string> () { "test entry" });
+
+ var dcs = new DataContractSerializer (typeof(Dictionary<string, object>));
+ dcs.WriteObject (new MemoryStream (), dict);
+ // Should not throw exception.
+ }
}
}