diff options
author | Lluis Sanchez <lluis@novell.com> | 2005-12-07 18:42:54 +0300 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2005-12-07 18:42:54 +0300 |
commit | eee1751b77eee3398e489564c1ab889181fbe46d (patch) | |
tree | 9f981ca40feeff777335d2ef1aaa56d5b9a08ce2 /mcs/class/System.XML | |
parent | fd57f65bcc67902958adf09c62f74fdadd527718 (diff) |
2005-12-07 Lluis Sanchez Gual <lluis@novell.com>
* XmlSerializationReaderInterpreter.cs: When deserializing a "flat"
collection, don't create a new collection if the property already has a
collection instance.
* SerializationCodeGenerator.cs: same as above. Also return an empty
string for flag enum default values.
svn path=/trunk/mcs/; revision=54043
Diffstat (limited to 'mcs/class/System.XML')
3 files changed, 34 insertions, 7 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog index 3381bf3557c..663274672ba 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/ChangeLog +++ b/mcs/class/System.XML/System.Xml.Serialization/ChangeLog @@ -1,3 +1,11 @@ +2005-12-07 Lluis Sanchez Gual <lluis@novell.com> + + * XmlSerializationReaderInterpreter.cs: When deserializing a "flat" + collection, don't create a new collection if the property already has a + collection instance. + * SerializationCodeGenerator.cs: same as above. Also return an empty + string for flag enum default values. + 2005-12-06 Konstantin Triger <kostat@mainsoft.com> * TypeTranslator.cs: TARGET_JVM: save additional types per AppDomain. diff --git a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs index 42c903d0e44..46a9f05ae73 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs @@ -516,6 +516,7 @@ namespace System.Xml.Serialization if (emap.IsFlags) { WriteLineInd ("default:"); + WriteLine ("if (val.ToString () == \"0\") return string.Empty;"); WriteLine ("System.Text.StringBuilder sb = new System.Text.StringBuilder ();"); WriteLine ("string[] enumNames = val.ToString().Split (',');"); WriteLine ("foreach (string name in enumNames)"); @@ -1642,11 +1643,20 @@ namespace System.Xml.Serialization if (!MemberHasReadReplaceHook (xmlMapType, mem)) { flatLists[n] = GetObTempVar (); string rval; - if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList)) - rval = ob + ".@" + mem.Name; - else + WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + ";"); + if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList)) { + rval = GenerateGetMemberValue (mem, ob, isValueList); + WriteLine (flatLists[n] + " = " + rval + ";"); + } else if (mem.TypeData.Type.IsArray) { rval = GenerateInitializeList (mem.TypeData); - WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + " = " + rval + ";"); + WriteLine (flatLists[n] + " = " + rval + ";"); + } else { + WriteLine (flatLists[n] + " = " + GenerateGetMemberValue (mem, ob, isValueList) + ";"); + WriteLineInd ("if (((object)" + flatLists[n] + ") == null) {"); + WriteLine (flatLists[n] + " = " + GenerateInitializeList (mem.TypeData) + ";"); + GenerateSetMemberValue (mem, ob, flatLists[n], isValueList); + WriteLineUni ("}"); + } } if (mem.ChoiceMember != null) { @@ -1916,7 +1926,7 @@ namespace System.Xml.Serialization string list = flatLists[mem.FlatArrayIndex]; if (mem.TypeData.Type.IsArray) WriteLine (list + " = (" + mem.TypeData.FullTypeName + ") ShrinkArray (" + list + ", " + indexes[mem.FlatArrayIndex] + ", " + GetTypeOf(mem.TypeData.Type.GetElementType()) + ", true);"); - if (!IsReadOnly (typeMap, mem, mem.TypeData, isValueList)) + if (!IsReadOnly (typeMap, mem, mem.TypeData, isValueList) && mem.TypeData.Type.IsArray) GenerateSetMemberValue (mem, ob, list, isValueList); } } diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs index f53f484d704..3863dcf010e 100644 --- a/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs +++ b/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs @@ -321,8 +321,17 @@ namespace System.Xml.Serialization foreach (XmlTypeMapMemberExpandable mem in map.FlatLists) { if (IsReadOnly (mem, mem.TypeData, ob, isValueList)) flatLists [mem.FlatArrayIndex] = mem.GetValue (ob); - else + else if (mem.TypeData.Type.IsArray) { flatLists [mem.FlatArrayIndex] = InitializeList (mem.TypeData); + } + else { + object list = mem.GetValue (ob); + if (list == null) { + list = InitializeList (mem.TypeData); + SetMemberValue (mem, ob, list, isValueList); + } + flatLists [mem.FlatArrayIndex] = list; + } if (mem.ChoiceMember != null) { if (flatListsChoices == null) @@ -485,7 +494,7 @@ namespace System.Xml.Serialization Object list = flatLists[mem.FlatArrayIndex]; if (mem.TypeData.Type.IsArray) list = ShrinkArray ((Array)list, indexes[mem.FlatArrayIndex], mem.TypeData.Type.GetElementType(), true); - if (!IsReadOnly (mem, mem.TypeData, ob, isValueList)) + if (!IsReadOnly (mem, mem.TypeData, ob, isValueList) && mem.TypeData.Type.IsArray) SetMemberValue (mem, ob, list, isValueList); } } |