Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReflectionWriteCollection()

void System.Runtime.Serialization.ReflectionXmlFormatWriter.ReflectionWriteCollection ( XmlWriterDelegator xmlWriter,
object obj,
XmlObjectSerializerWriteContext context,
CollectionDataContract collectionDataContract )
inline

Definition at line 18 of file ReflectionXmlFormatWriter.cs.

19 {
22 if (collectionDataContract.ChildElementNamespace != null)
23 {
24 xmlWriter.WriteNamespaceDecl(collectionDataContract.ChildElementNamespace);
25 }
26 if (collectionDataContract.Kind == CollectionKind.Array)
27 {
28 context.IncrementArrayCount(xmlWriter, (Array)obj);
30 if (!ReflectionTryWritePrimitiveArray(xmlWriter, obj, collectionDataContract.UnderlyingType, itemType, collectionItemName, @namespace))
31 {
32 Array array = (Array)obj;
33 PrimitiveDataContract primitiveDataContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType);
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);
44 IEnumerator enumeratorForCollection = collectionDataContract.GetEnumeratorForCollection(obj);
45 PrimitiveDataContract primitiveDataContract2 = PrimitiveDataContract.GetPrimitiveDataContract(collectionDataContract.UnderlyingType);
46 if (primitiveDataContract2 != null && primitiveDataContract2.UnderlyingType != Globals.TypeOfObject)
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();
57 bool flag = collectionDataContract.Kind == CollectionKind.Dictionary || collectionDataContract.Kind == CollectionKind.GenericDictionary;
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 }

References System.array, System.Xml.Array, System.Runtime.Serialization.Dictionary, System.Xml.Dictionary, System.Runtime.Serialization.PrimitiveDataContract.GetPrimitiveDataContract(), System.Runtime.Serialization.XmlObjectSerializerWriteContext.IncrementArrayCount(), System.Runtime.Serialization.XmlObjectSerializerContext.IncrementItemCount(), System.obj, and System.Runtime.Serialization.Globals.TypeOfObject.

Referenced by System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.CreateReflectionXmlFormatCollectionWriterDelegate().