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

◆ GenerateTypeElement()

string System.Xml.Serialization.XmlSerializationWriterILGen.GenerateTypeElement ( XmlTypeMapping xmlTypeMapping)
inlineprivate

Definition at line 471 of file XmlSerializationWriterILGen.cs.

472 {
473 ElementAccessor accessor = xmlTypeMapping.Accessor;
474 TypeMapping mapping = accessor.Mapping;
475 string text = NextMethodName(accessor.Name);
476 ilg = new CodeGenerator(typeBuilder);
477 ilg.BeginMethod(typeof(void), text, new Type[1] { typeof(object) }, new string[1] { "o" }, MethodAttributes.Public | MethodAttributes.HideBySig);
478 MethodInfo method = typeof(XmlSerializationWriter).GetMethod("WriteStartDocument", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
479 ilg.Ldarg(0);
480 ilg.Call(method);
481 ilg.If(ilg.GetArg("o"), Cmp.EqualTo, null);
482 if (accessor.IsNullable)
483 {
484 WriteLiteralNullTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
485 }
486 else
487 {
488 WriteEmptyTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
489 }
491 ilg.EndIf();
492 if (!mapping.TypeDesc.IsValueType && !mapping.TypeDesc.Type.IsPrimitive)
493 {
494 MethodInfo method2 = typeof(XmlSerializationWriter).GetMethod("TopLevelElement", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
495 ilg.Ldarg(0);
497 }
498 WriteMember(new SourceInfo("o", "o", null, typeof(object), ilg), null, new ElementAccessor[1] { accessor }, null, null, mapping.TypeDesc, writeAccessors: true);
499 ilg.EndMethod();
500 return text;
501 }
void BeginMethod(Type returnType, string methodName, Type[] argTypes, string[] argNames, MethodAttributes methodAttributes)
void Call(MethodInfo methodInfo)
void WriteMember(SourceInfo source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent)

References System.Xml.Serialization.CodeGenerator.BeginMethod(), System.Xml.Serialization.CodeGenerator.Call(), System.Xml.Dictionary, System.Type.EmptyTypes, System.Xml.Serialization.CodeGenerator.EndIf(), System.Xml.Serialization.CodeGenerator.EndMethod(), System.Xml.Serialization.CodeGenerator.GetArg(), System.Xml.Serialization.CodeGenerator.GotoMethodEnd(), System.Xml.Serialization.CodeGenerator.If(), System.Xml.Serialization.XmlSerializationILGen.ilg, System.Xml.Serialization.CodeGenerator.Ldarg(), System.Xml.Serialization.XmlSerializationWriterILGen.NextMethodName(), System.text, System.Xml.Serialization.XmlSerializationILGen.typeBuilder, System.Xml.Serialization.XmlSerializationWriterILGen.WriteEmptyTag(), System.Xml.Serialization.XmlSerializationWriterILGen.WriteLiteralNullTag(), and System.Xml.Serialization.XmlSerializationWriterILGen.WriteMember().

Referenced by System.Xml.Serialization.XmlSerializationWriterILGen.GenerateElement().