Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionClassWriter.cs
Go to the documentation of this file.
2using System.IO;
4using System.Xml;
5
7
8internal abstract class ReflectionClassWriter
9{
10 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
29
30 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
32 {
33 Type type2 = type;
34 object obj = value;
36 if (type2.IsValueType && !flag)
37 {
39 {
40 primitiveContractForParamType.WriteXmlValue(xmlWriter, obj, context);
41 }
42 else
43 {
44 ReflectionInternalSerialize(xmlWriter, context, obj, obj.GetType().TypeHandle.Equals(type2.TypeHandle), writeXsiType, type2);
45 }
46 return;
47 }
48 if (flag)
49 {
50 if (obj == null)
51 {
53 }
54 else
55 {
56 MethodInfo method = type2.GetMethod("get_Value", Type.EmptyTypes);
57 obj = method.Invoke(obj, Array.Empty<object>());
58 type2 = obj.GetType();
59 }
60 }
61 if (obj == null)
62 {
64 return;
65 }
68 {
70 }
71 else if (obj == null && (type2 == Globals.TypeOfObject || (flag && type2.IsValueType)))
72 {
74 }
75 else
76 {
77 ReflectionInternalSerialize(xmlWriter, context, obj, obj.GetType().TypeHandle.Equals(type2.TypeHandle), writeXsiType, type2, flag);
78 }
79 }
80
81 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
83
85 {
86 return dataMember.Getter(obj);
87 }
88
89 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
91 {
92 if (primitiveContract == null || primitiveContract.UnderlyingType == Globals.TypeOfObject)
93 {
94 return false;
95 }
96 primitiveContract.WriteXmlElement(xmlWriter, value, context, name, ns);
97 return true;
98 }
99
101 {
102 if (classContract.BaseContract != null)
103 {
104 InvokeOnSerializing(obj, context, classContract.BaseContract);
105 }
106 if (classContract.OnSerializing != null)
107 {
109 classContract.OnSerializing.Invoke(obj, new object[1] { streamingContext });
110 }
111 }
112
114 {
115 if (classContract.BaseContract != null)
116 {
117 InvokeOnSerialized(obj, context, classContract.BaseContract);
118 }
119 if (classContract.OnSerialized != null)
120 {
122 classContract.OnSerialized.Invoke(obj, new object[1] { streamingContext });
123 }
124 }
125
127 {
128 Type type = obj.GetType();
130 {
132 }
133 else if (type == Globals.TypeOfMemoryStream)
134 {
136 }
137 else if (type.IsGenericType && type.GetGenericTypeDefinition() == Globals.TypeOfKeyValuePair)
138 {
139 obj = classContract.KeyValuePairAdapterConstructorInfo.Invoke(new object[1] { obj });
140 }
141 return obj;
142 }
143
144 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
156}
object? Invoke(object? obj, object?[]? parameters)
static int GetId(RuntimeTypeHandle typeHandle)
static MemoryStreamAdapter GetMemoryStreamAdapter(MemoryStream memoryStream)
static PrimitiveDataContract GetPrimitiveDataContract(Type type)
override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context)
object ResolveAdapterType(object obj, ClassDataContract classContract)
void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object value, bool writeXsiType, PrimitiveDataContract primitiveContractForParamType)
bool ReflectionTryWritePrimitive(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object value, XmlDictionaryString name, XmlDictionaryString ns, PrimitiveDataContract primitiveContract)
object ReflectionGetMemberValue(object obj, DataMember dataMember)
int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[] memberNames)
void InvokeOnSerializing(object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract)
void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, XmlDictionaryString[] memberNames)
void InvokeOnSerialized(object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract)
void ReflectionInternalSerialize(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, object obj, bool isDeclaredType, bool writeXsiType, Type memberType, bool isNullableOfT=false)
void WriteNull(XmlWriterDelegator xmlWriter, Type memberType, bool isMemberTypeSerializable)
void WriteISerializable(XmlWriterDelegator xmlWriter, ISerializable obj)
void InternalSerializeReference(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
virtual void InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject extensionData, int memberIndex)
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
static readonly Type[] EmptyTypes
Definition Type.cs:19
virtual Type GetGenericTypeDefinition()
Definition Type.cs:495
static ? Type GetUnderlyingType(Type nullableType)
Definition Nullable.cs:139
static DateTimeOffsetAdapter GetDateTimeOffsetAdapter(DateTimeOffset value)