Forráskód Böngészése

[S.R.Serialization] Fix TryWritePrimitive() parameter assignment.

It was inconsistent with what referencesource codegen does.
Atsushi Eno 10 éve
szülő
commit
d1152054a2

+ 5 - 8
mcs/class/System.Runtime.Serialization/ReferenceSources/XmlFormatWriterGenerator_static.cs

@@ -58,8 +58,6 @@ namespace System.Runtime.Serialization
 		int typeIndex = 1;
 		int childElementIndex = 0;
 
-		Dictionary<string,object> memberValues = new Dictionary<string,object> ();
-
 		public void WriteToXml (XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract dataContract)
 		{
 			this.writer = xmlWriter;
@@ -316,17 +314,18 @@ namespace System.Runtime.Serialization
 				object memberValue = null;
 				if (member.IsGetOnlyCollection)
 					ctx.StoreIsGetOnlyCollection ();
-				bool doWrite = true;
+				bool doWrite = true, hasMemberValue = false;
 				if (!member.EmitDefaultValue)
 				{
+					hasMemberValue = true;
 					memberValue = LoadMemberValue (member);
-					doWrite = IsDefaultValue (memberType, memberValue);
+					doWrite = !IsDefaultValue (memberType, memberValue);
 				}
 
 				if (doWrite) {
 
 					bool writeXsiType = CheckIfMemberHasConflict (member, classContract, derivedMostClassContract);
-					if (writeXsiType || !TryWritePrimitive (memberType, () =>memberValue, member.MemberInfo, null /*arrayItemIndex*/, ns, null /*nameLocal*/, i + childElementIndex)) {
+					if (writeXsiType || !TryWritePrimitive (memberType, hasMemberValue ? () => memberValue : (Func<object>) null, member.MemberInfo, null /*arrayItemIndex*/, ns, null /*nameLocal*/, i + childElementIndex)) {
 						WriteStartElement (memberType, classContract.Namespace, ns, null /*nameLocal*/, i + childElementIndex);
 						if (classContract.ChildElementNamespaces [i + childElementIndex] != null)
 							writer.WriteNamespaceDecl (childElementNamespaces [i + childElementIndex]);
@@ -603,9 +602,7 @@ namespace System.Runtime.Serialization
 
 		object LoadMemberValue (DataMember member)
 		{
-			var v = CodeInterpreter.GetMember (member.MemberInfo, objLocal);
-			memberValues [member.Name + "Value"] = v;
-			return v;
+			return CodeInterpreter.GetMember (member.MemberInfo, objLocal);
 		}
 	}
 }