diff options
author | Marcos Henrich <marcoshenrich@gmail.com> | 2016-03-30 13:57:56 +0300 |
---|---|---|
committer | Marcos Henrich <marcoshenrich@gmail.com> | 2016-03-30 13:57:56 +0300 |
commit | ff49850dfc18f5991246a203184fa1e0b8a7c7ab (patch) | |
tree | c26d781eee044f616e08bd9dd7e8aa341d215812 /mcs/class/System.Runtime.Serialization | |
parent | f41e857d3fef58b944e1523f0ee9a97b4f142468 (diff) | |
parent | 8a1e9242f6d25e408644d0339dcf5c222d95671d (diff) |
Merge pull request #2698 from esdrubal/iosxmlarray
[System.Runtime.Serialization] Static writer fix.
Diffstat (limited to 'mcs/class/System.Runtime.Serialization')
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. + } } } |