|
@@ -1584,6 +1584,7 @@ namespace System.Xml.Serialization
|
|
|
WriteLine ("Reader.MoveToElement();");
|
|
WriteLine ("Reader.MoveToElement();");
|
|
|
WriteLineInd ("if (Reader.IsEmptyElement) {");
|
|
WriteLineInd ("if (Reader.IsEmptyElement) {");
|
|
|
WriteLine ("Reader.Skip ();");
|
|
WriteLine ("Reader.Skip ();");
|
|
|
|
|
+ GenerateSetListMembersDefaults (typeMap, map, ob, isValueList);
|
|
|
WriteLine ("return " + ob + ";");
|
|
WriteLine ("return " + ob + ";");
|
|
|
WriteLineUni ("}");
|
|
WriteLineUni ("}");
|
|
|
WriteLine ("");
|
|
WriteLine ("");
|
|
@@ -1629,8 +1630,11 @@ namespace System.Xml.Serialization
|
|
|
code += indexes[n] + "=0";
|
|
code += indexes[n] + "=0";
|
|
|
if (!MemberHasReadReplaceHook (xmlMapType, mem)) {
|
|
if (!MemberHasReadReplaceHook (xmlMapType, mem)) {
|
|
|
flatLists[n] = GetObTempVar ();
|
|
flatLists[n] = GetObTempVar ();
|
|
|
- string rval = "null";
|
|
|
|
|
- if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList)) rval = ob + ".@" + mem.Name;
|
|
|
|
|
|
|
+ string rval;
|
|
|
|
|
+ if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList))
|
|
|
|
|
+ rval = ob + ".@" + mem.Name;
|
|
|
|
|
+ else
|
|
|
|
|
+ rval = GenerateInitializeList (mem.TypeData);
|
|
|
WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + " = " + rval + ";");
|
|
WriteLine (mem.TypeData.FullTypeName + " " + flatLists[n] + " = " + rval + ";");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1875,6 +1879,9 @@ namespace System.Xml.Serialization
|
|
|
GenerateSetMemberValue (mem, ob, list, isValueList);
|
|
GenerateSetMemberValue (mem, ob, list, isValueList);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ GenerateSetListMembersDefaults (typeMap, map, ob, isValueList);
|
|
|
|
|
+
|
|
|
GenerateEndHook ();
|
|
GenerateEndHook ();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1885,6 +1892,22 @@ namespace System.Xml.Serialization
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ void GenerateSetListMembersDefaults (XmlTypeMapping typeMap, ClassMap map, string ob, bool isValueList)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (map.ListMembers != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ ArrayList members = map.ListMembers;
|
|
|
|
|
+ for (int n=0; n<members.Count; n++) {
|
|
|
|
|
+ XmlTypeMapMember mem = (XmlTypeMapMember) members[n];
|
|
|
|
|
+ if (IsReadOnly (typeMap, mem, mem.TypeData, isValueList))
|
|
|
|
|
+ continue;
|
|
|
|
|
+ WriteLineInd ("if (" + GenerateGetMemberValue (mem, ob, isValueList) + " == null) {");
|
|
|
|
|
+ GenerateSetMemberValue (mem, ob, GenerateInitializeList (mem.TypeData), isValueList);
|
|
|
|
|
+ WriteLineUni ("}");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
bool IsReadOnly (XmlTypeMapping map, XmlTypeMapMember member, TypeData memType, bool isValueList)
|
|
bool IsReadOnly (XmlTypeMapping map, XmlTypeMapMember member, TypeData memType, bool isValueList)
|
|
|
{
|
|
{
|
|
|
if (isValueList) return !memType.HasPublicConstructor;
|
|
if (isValueList) return !memType.HasPublicConstructor;
|
|
@@ -2098,6 +2121,14 @@ namespace System.Xml.Serialization
|
|
|
return "new " + listType.FullName + "()";
|
|
return "new " + listType.FullName + "()";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ string GenerateInitializeList (TypeData listType)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (listType.Type.IsArray)
|
|
|
|
|
+ return "null";
|
|
|
|
|
+ else
|
|
|
|
|
+ return "new " + listType.Type.FullName + "()";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
void GenerateFillerCallbacks ()
|
|
void GenerateFillerCallbacks ()
|
|
|
{
|
|
{
|
|
|
foreach (TypeData td in _listsToFill)
|
|
foreach (TypeData td in _listsToFill)
|