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

◆ GenerateSerializerContract()

void System.Xml.Serialization.XmlSerializationILGen.GenerateSerializerContract ( string className,
XmlMapping[] xmlMappings,
Type[] types,
string readerType,
string[] readMethods,
string writerType,
string[] writerMethods,
Dictionary< string, string > serializers )
inlinepackageinherited

Definition at line 405 of file XmlSerializationILGen.cs.

406 {
407 TypeBuilder typeBuilder = CodeGenerator.CreateTypeBuilder(_moduleBuilder, "XmlSerializerContract", TypeAttributes.Public | TypeAttributes.BeforeFieldInit, typeof(XmlSerializerImplementation), Type.EmptyTypes);
408 ilg = new CodeGenerator(typeBuilder);
409 PropertyBuilder propertyBuilder = typeBuilder.DefineProperty("Reader", PropertyAttributes.None, typeof(XmlSerializationReader), null, null, null, null, null);
410 ilg.BeginMethod(typeof(XmlSerializationReader), "get_Reader", Type.EmptyTypes, Array.Empty<string>(), MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.SpecialName);
411 propertyBuilder.SetGetMethod(ilg.MethodBuilder);
412 ConstructorInfo constructor = CreatedTypes[readerType].GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
414 ilg.EndMethod();
415 ilg = new CodeGenerator(typeBuilder);
416 propertyBuilder = typeBuilder.DefineProperty("Writer", PropertyAttributes.None, typeof(XmlSerializationWriter), null, null, null, null, null);
417 ilg.BeginMethod(typeof(XmlSerializationWriter), "get_Writer", Type.EmptyTypes, Array.Empty<string>(), MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.SpecialName);
418 propertyBuilder.SetGetMethod(ilg.MethodBuilder);
419 constructor = CreatedTypes[writerType].GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
421 ilg.EndMethod();
427 ConstructorInfo constructor2 = typeof(XmlSerializerImplementation).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
428 ilg = new CodeGenerator(typeBuilder);
429 ilg.BeginMethod(typeof(void), ".ctor", Type.EmptyTypes, Array.Empty<string>(), MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName);
430 ilg.Ldarg(0);
431 ilg.Load(null);
433 ilg.Ldarg(0);
434 ilg.Load(null);
436 ilg.Ldarg(0);
437 ilg.Load(null);
439 ilg.Ldarg(0);
441 ilg.EndMethod();
443 CreatedTypes.Add(type.Name, type);
444 }
void Add(TKey key, TValue value)
static int DefineProperty(QCallModule module, int tkParent, string name, PropertyAttributes attributes, byte[] signature, int sigLength)
virtual Type AsType()
Definition TypeInfo.cs:106
void StoreMember(MemberInfo memberInfo)
void New(ConstructorInfo constructorInfo)
void BeginMethod(Type returnType, string methodName, Type[] argTypes, string[] argNames, MethodAttributes methodAttributes)
void Call(MethodInfo methodInfo)
void GenerateSupportedTypes(Type[] types, TypeBuilder serializerContractTypeBuilder)
FieldBuilder GeneratePublicMethods(string privateName, string publicName, string[] methods, XmlMapping[] xmlMappings, TypeBuilder serializerContractTypeBuilder)
void GenerateGetSerializer(Dictionary< string, string > serializers, XmlMapping[] xmlMappings, TypeBuilder serializerContractTypeBuilder)
FieldBuilder GenerateTypedSerializers(Dictionary< string, string > serializers, TypeBuilder serializerContractTypeBuilder)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Reflection.TypeInfo.AsType(), System.Xml.Serialization.CodeGenerator.BeginMethod(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Serialization.CodeGenerator.CreateTypeBuilder(), System.Reflection.Emit.TypeBuilder.CreateTypeInfo(), System.Reflection.Emit.TypeBuilder.DefineProperty(), System.Xml.Dictionary, System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndMethod(), System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.CodeGenerator.Load(), System.Xml.Serialization.CodeGenerator.MethodBuilder, System.Xml.Serialization.CodeGenerator.New(), System.Xml.Serialization.CodeGenerator.StoreMember(), and System.type.