Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionXmlClassWriter.cs
Go to the documentation of this file.
3using System.Xml;
4
6
8{
9 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
11 {
12 int num = ((classContract.BaseContract != null) ? ReflectionWriteMembers(xmlWriter, obj, context, classContract.BaseContract, derivedMostClassContract, childElementIndex, emptyStringArray) : 0);
13 childElementIndex += num;
16 context.IncrementItemCount(classContract.Members.Count);
17 int num2 = 0;
18 while (num2 < classContract.Members.Count)
19 {
21 Type memberType = dataMember.MemberType;
22 if (dataMember.IsGetOnlyCollection)
23 {
25 }
26 else
27 {
29 }
30 bool flag = true;
31 object obj2 = null;
32 if (!dataMember.EmitDefaultValue)
33 {
34 obj2 = ReflectionGetMemberValue(obj, dataMember);
36 if ((obj2 == null && defaultValue == null) || (obj2 != null && obj2.Equals(defaultValue)))
37 {
38 flag = false;
39 if (dataMember.IsRequired)
40 {
42 }
43 }
44 }
45 if (flag)
46 {
47 bool flag2 = CheckIfMemberHasConflict(dataMember, classContract, derivedMostClassContract);
48 if (obj2 == null)
49 {
50 obj2 = ReflectionGetMemberValue(obj, dataMember);
51 }
53 if (flag2 || !ReflectionTryWritePrimitive(xmlWriter, context, memberType, obj2, memberNames[num2 + childElementIndex], @namespace, memberPrimitiveContract))
54 {
55 ReflectionWriteStartElement(xmlWriter, memberType, @namespace, @namespace.Value, dataMember.Name, 0);
56 if (classContract.ChildElementNamespaces[num2 + childElementIndex] != null)
57 {
58 XmlDictionaryString ns = classContract.ChildElementNamespaces[num2 + childElementIndex];
59 xmlWriter.WriteNamespaceDecl(ns);
60 }
61 ReflectionWriteValue(xmlWriter, context, memberType, obj2, flag2, null);
62 ReflectionWriteEndElement(xmlWriter);
63 }
64 if (classContract.HasExtensionData)
65 {
66 context.WriteExtensionData(xmlWriter, ((IExtensibleDataObject)obj).ExtensionData, num);
67 }
68 }
69 num2++;
70 num++;
71 }
72 return num;
73 }
74
76 {
77 if (NeedsPrefix(type, ns))
78 {
79 xmlWriter.WriteStartElement("q", nameLocal, namespaceLocal);
80 }
81 else
82 {
83 xmlWriter.WriteStartElement(nameLocal, namespaceLocal);
84 }
85 }
86
88 {
89 xmlWriter.WriteEndElement();
90 }
91
93 {
95 {
96 if (ns != null && ns.Value != null)
97 {
98 return ns.Value.Length > 0;
99 }
100 return false;
101 }
102 return false;
103 }
104
106 {
108 {
109 return true;
110 }
111 string name = member.Name;
112 string @namespace = classContract.StableName.Namespace;
115 {
116 if (@namespace == classDataContract.StableName.Namespace)
117 {
119 for (int i = 0; i < members.Count; i++)
120 {
121 if (name == members[i].Name)
122 {
123 return CheckIfConflictingMembersHaveDifferentTypes(members[i]);
124 }
125 }
126 }
128 }
129 return false;
130 }
131
133 {
134 while (member.ConflictingMember != null)
135 {
136 if (member.MemberType != member.ConflictingMember.MemberType)
137 {
138 return true;
139 }
140 member = member.ConflictingMember;
141 }
142 return false;
143 }
144}
override int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[] emptyStringArray)
bool CheckIfMemberHasConflict(DataMember member, ClassDataContract classContract, ClassDataContract derivedMostClassContract)
void ReflectionWriteStartElement(XmlWriterDelegator xmlWriter, Type type, XmlDictionaryString ns, string namespaceLocal, string nameLocal, int nameIndex)
void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject extensionData, int memberIndex)