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

◆ WriteStructMethod()

void System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteStructMethod ( StructMapping mapping,
string n,
string ns,
object o,
bool isNullable,
bool needType )
inlineprivate

Definition at line 462 of file ReflectionXmlSerializationWriter.cs.

463 {
464 if (mapping.IsSoap && mapping.TypeDesc.IsRoot)
465 {
466 return;
467 }
468 if (!mapping.IsSoap)
469 {
470 if (o == null)
471 {
472 if (isNullable)
473 {
475 }
476 return;
477 }
478 if (!needType && o.GetType() != mapping.TypeDesc.Type)
479 {
481 {
482 if (!mapping.TypeDesc.IsRoot)
483 {
485 }
486 if (!WriteEnumAndArrayTypes(mapping, o, n, ns))
487 {
489 }
490 }
491 return;
492 }
493 }
494 if (mapping.TypeDesc.IsAbstract)
495 {
496 return;
497 }
498 if (mapping.TypeDesc.Type != null && typeof(XmlSchemaObject).IsAssignableFrom(mapping.TypeDesc.Type))
499 {
500 base.EscapeName = false;
501 }
502 XmlSerializerNamespaces xmlSerializerNamespaces = null;
503 MemberMapping[] allMembers = TypeScope.GetAllMembers(mapping);
504 int num = FindXmlnsIndex(allMembers);
505 if (num >= 0)
506 {
507 MemberMapping memberMapping = allMembers[num];
508 xmlSerializerNamespaces = (XmlSerializerNamespaces)GetMemberValue(o, memberMapping.Name);
509 }
510 if (!mapping.IsSoap)
511 {
513 if (!mapping.TypeDesc.IsRoot && needType)
514 {
515 WriteXsiType(mapping.TypeName, mapping.Namespace);
516 }
517 }
518 else if (xmlSerializerNamespaces != null)
519 {
521 }
522 foreach (MemberMapping memberMapping2 in allMembers)
523 {
524 bool flag = true;
525 bool flag2 = true;
526 if (memberMapping2.CheckSpecified != 0)
527 {
528 string memberName = memberMapping2.Name + "Specified";
530 }
531 if (memberMapping2.CheckShouldPersist)
532 {
533 string name = "ShouldSerialize" + memberMapping2.Name;
534 MethodInfo method = o.GetType().GetMethod(name, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
535 flag2 = (bool)method.Invoke(o, Array.Empty<object>());
536 }
537 if (memberMapping2.Attribute != null && flag && flag2)
538 {
541 }
542 }
543 foreach (MemberMapping memberMapping3 in allMembers)
544 {
545 if (memberMapping3.Xmlns != null)
546 {
547 continue;
548 }
549 bool flag3 = true;
550 bool flag4 = true;
551 if (memberMapping3.CheckSpecified != 0)
552 {
553 string memberName2 = memberMapping3.Name + "Specified";
555 }
556 if (memberMapping3.CheckShouldPersist)
557 {
558 string name2 = "ShouldSerialize" + memberMapping3.Name;
559 MethodInfo method2 = o.GetType().GetMethod(name2, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
560 flag4 = (bool)method2.Invoke(o, Array.Empty<object>());
561 }
562 if (!memberMapping3.CheckShouldPersist || (memberMapping3.Elements.Length == 0 && memberMapping3.Text == null))
563 {
564 flag4 = true;
565 }
566 if (flag3 && flag4)
567 {
568 object choiceSource = null;
569 if (memberMapping3.ChoiceIdentifier != null)
570 {
571 choiceSource = GetMemberValue(o, memberMapping3.ChoiceIdentifier.MemberName);
572 }
574 WriteMember(memberValue2, choiceSource, memberMapping3.ElementsSortedByDerivation, memberMapping3.Text, memberMapping3.ChoiceIdentifier, memberMapping3.TypeDesc, writeAccessors: true);
575 }
576 }
577 if (!mapping.IsSoap)
578 {
580 }
581 }
bool WriteEnumAndArrayTypes(StructMapping structMapping, object o, string n, string ns)
bool WriteDerivedTypes(StructMapping mapping, string n, string ns, object o, bool isNullable)
void WriteMember(object o, object choiceSource, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc memberTypeDesc, bool writeAccessors)
void WriteNamespaceDeclarations(XmlSerializerNamespaces? xmlns)
void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType)

References System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(), System.Xml.Dictionary, System.Xml.Serialization.ReflectionXmlSerializationWriter.FindXmlnsIndex(), System.Xml.Serialization.TypeScope.GetAllMembers(), System.Xml.Serialization.ReflectionXmlSerializationWriter.GetMemberValue(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteDerivedTypes(), System.Xml.Serialization.XmlSerializationWriter.WriteEndElement(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteEnumAndArrayTypes(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteMember(), System.Xml.Serialization.XmlSerializationWriter.WriteNamespaceDeclarations(), System.Xml.Serialization.XmlSerializationWriter.WriteNullTagLiteral(), System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(), System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(), and System.Xml.Serialization.XmlSerializationWriter.WriteXsiType().

Referenced by System.Xml.Serialization.ReflectionXmlSerializationWriter.CreateXmlSerializationWriteCallback(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteDerivedTypes(), and System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteElement().