Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionXmlFormatWriter.cs
Go to the documentation of this file.
3using System.Xml;
4
6
7internal sealed class ReflectionXmlFormatWriter
8{
10
11 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
16
17 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
19 {
22 if (collectionDataContract.ChildElementNamespace != null)
23 {
24 xmlWriter.WriteNamespaceDecl(collectionDataContract.ChildElementNamespace);
25 }
26 if (collectionDataContract.Kind == CollectionKind.Array)
27 {
30 if (!ReflectionTryWritePrimitiveArray(xmlWriter, obj, collectionDataContract.UnderlyingType, itemType, collectionItemName, @namespace))
31 {
34 for (int i = 0; i < array.Length; i++)
35 {
36 _reflectionClassWriter.ReflectionWriteStartElement(xmlWriter, itemType, @namespace, @namespace.Value, collectionItemName.Value, 0);
37 _reflectionClassWriter.ReflectionWriteValue(xmlWriter, context, itemType, array.GetValue(i), writeXsiType: false, primitiveDataContract);
38 _reflectionClassWriter.ReflectionWriteEndElement(xmlWriter);
39 }
40 }
41 return;
42 }
43 collectionDataContract.IncrementCollectionCount(xmlWriter, obj, context);
47 {
48 while (enumeratorForCollection.MoveNext())
49 {
50 object current = enumeratorForCollection.Current;
51 context.IncrementItemCount(1);
52 primitiveDataContract2.WriteXmlElement(xmlWriter, current, context, collectionItemName, @namespace);
53 }
54 return;
55 }
56 Type collectionElementType = collectionDataContract.GetCollectionElementType();
58 while (enumeratorForCollection.MoveNext())
59 {
60 object current2 = enumeratorForCollection.Current;
61 context.IncrementItemCount(1);
62 _reflectionClassWriter.ReflectionWriteStartElement(xmlWriter, collectionElementType, @namespace, @namespace.Value, collectionItemName.Value, 0);
63 if (flag)
64 {
65 collectionDataContract.ItemContract.WriteXmlValue(xmlWriter, current2, context);
66 }
67 else
68 {
69 _reflectionClassWriter.ReflectionWriteValue(xmlWriter, context, collectionElementType, current2, writeXsiType: false, null);
70 }
71 _reflectionClassWriter.ReflectionWriteEndElement(xmlWriter);
72 }
73 }
74
75 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
77 {
79 if (primitiveDataContract == null)
80 {
81 return false;
82 }
83 switch (itemType.GetTypeCode())
84 {
85 case TypeCode.Boolean:
86 xmlWriter.WriteBooleanArray((bool[])obj, collectionItemName, itemNamespace);
87 break;
88 case TypeCode.DateTime:
89 xmlWriter.WriteDateTimeArray((DateTime[])obj, collectionItemName, itemNamespace);
90 break;
91 case TypeCode.Decimal:
92 xmlWriter.WriteDecimalArray((decimal[])obj, collectionItemName, itemNamespace);
93 break;
94 case TypeCode.Int32:
95 xmlWriter.WriteInt32Array((int[])obj, collectionItemName, itemNamespace);
96 break;
97 case TypeCode.Int64:
98 xmlWriter.WriteInt64Array((long[])obj, collectionItemName, itemNamespace);
99 break;
100 case TypeCode.Single:
101 xmlWriter.WriteSingleArray((float[])obj, collectionItemName, itemNamespace);
102 break;
103 case TypeCode.Double:
104 xmlWriter.WriteDoubleArray((double[])obj, collectionItemName, itemNamespace);
105 break;
106 default:
107 return false;
108 }
109 return true;
110 }
111}
static PrimitiveDataContract GetPrimitiveDataContract(Type type)
void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, XmlDictionaryString[] memberNames)
bool ReflectionTryWritePrimitiveArray(XmlWriterDelegator xmlWriter, object obj, Type type, Type itemType, XmlDictionaryString collectionItemName, XmlDictionaryString itemNamespace)
void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, CollectionDataContract collectionDataContract)
void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract)
TypeCode
Definition TypeCode.cs:4