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

◆ WriteElement()

void System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteElement ( string source,
string arrayName,
string choiceSource,
ElementAccessor element,
ChoiceIdentifierAccessor choice,
string checkSpecified,
bool checkForNull,
bool readOnly,
int fixupIndex,
int elementIndex )
inlineprivate

Definition at line 2613 of file XmlSerializationReaderCodeGen.cs.

2614 {
2615 if (checkSpecified != null && checkSpecified.Length > 0)
2616 {
2617 base.Writer.Write(checkSpecified);
2618 base.Writer.WriteLine(" = true;");
2619 }
2620 if (element.Mapping is ArrayMapping)
2621 {
2622 WriteArray(source, arrayName, (ArrayMapping)element.Mapping, readOnly, element.IsNullable, fixupIndex);
2623 }
2624 else if (element.Mapping is NullableMapping)
2625 {
2626 string s = ReferenceMapping(element.Mapping);
2628 base.Writer.Write(s);
2629 base.Writer.Write("(true)");
2631 base.Writer.WriteLine(";");
2632 }
2633 else if (!element.Mapping.IsSoap && element.Mapping is PrimitiveMapping)
2634 {
2635 if (element.IsNullable)
2636 {
2637 base.Writer.WriteLine("if (ReadNull()) {");
2638 base.Writer.Indent++;
2640 if (element.Mapping.TypeDesc.IsValueType)
2641 {
2642 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(element.Mapping.TypeDesc.CSharpName, element.Mapping.TypeDesc.UseReflection, ctorInaccessible: false, cast: false));
2643 }
2644 else
2645 {
2646 base.Writer.Write("null");
2647 }
2649 base.Writer.WriteLine(";");
2650 base.Writer.Indent--;
2651 base.Writer.WriteLine("}");
2652 base.Writer.Write("else ");
2653 }
2654 if (element.Default != null && element.Default != DBNull.Value && element.Mapping.TypeDesc.IsValueType)
2655 {
2656 base.Writer.WriteLine("if (Reader.IsEmptyElement) {");
2657 base.Writer.Indent++;
2658 base.Writer.WriteLine("Reader.Skip();");
2659 base.Writer.Indent--;
2660 base.Writer.WriteLine("}");
2661 base.Writer.WriteLine("else {");
2662 }
2663 else
2664 {
2665 base.Writer.WriteLine("{");
2666 }
2667 base.Writer.Indent++;
2668 if (element.Mapping.TypeDesc.Type == typeof(TimeSpan) || element.Mapping.TypeDesc.Type == typeof(DateTimeOffset))
2669 {
2670 base.Writer.WriteLine("if (Reader.IsEmptyElement) {");
2671 base.Writer.Indent++;
2672 base.Writer.WriteLine("Reader.Skip();");
2674 if (element.Mapping.TypeDesc.Type == typeof(TimeSpan))
2675 {
2676 base.Writer.Write("default(System.TimeSpan)");
2677 }
2678 else if (element.Mapping.TypeDesc.Type == typeof(DateTimeOffset))
2679 {
2680 base.Writer.Write("default(System.DateTimeOffset)");
2681 }
2683 base.Writer.WriteLine(";");
2684 base.Writer.Indent--;
2685 base.Writer.WriteLine("}");
2686 base.Writer.WriteLine("else {");
2687 base.Writer.Indent++;
2689 WritePrimitive(element.Mapping, "Reader.ReadElementString()");
2691 base.Writer.WriteLine(";");
2692 base.Writer.Indent--;
2693 base.Writer.WriteLine("}");
2694 }
2695 else
2696 {
2698 if (element.Mapping.TypeDesc == base.QnameTypeDesc)
2699 {
2700 base.Writer.Write("ReadElementQualifiedName()");
2701 }
2702 else
2703 {
2704 string formatterName = element.Mapping.TypeDesc.FormatterName;
2705 WritePrimitive(source: (!(formatterName == "ByteArrayBase64") && !(formatterName == "ByteArrayHex")) ? "Reader.ReadElementString()" : "false", mapping: element.Mapping);
2706 }
2708 base.Writer.WriteLine(";");
2709 }
2710 base.Writer.Indent--;
2711 base.Writer.WriteLine("}");
2712 }
2713 else if (element.Mapping is StructMapping || (element.Mapping.IsSoap && element.Mapping is PrimitiveMapping))
2714 {
2715 TypeMapping mapping = element.Mapping;
2716 if (mapping.IsSoap)
2717 {
2718 base.Writer.Write("object rre = ");
2719 base.Writer.Write((fixupIndex >= 0) ? "ReadReferencingElement" : "ReadReferencedElement");
2720 base.Writer.Write("(");
2721 WriteID(mapping.TypeName);
2722 base.Writer.Write(", ");
2723 WriteID(mapping.Namespace);
2724 if (fixupIndex >= 0)
2725 {
2726 base.Writer.Write(", out fixup.Ids[");
2727 base.Writer.Write(fixupIndex.ToString(CultureInfo.InvariantCulture));
2728 base.Writer.Write("]");
2729 }
2730 base.Writer.Write(")");
2732 base.Writer.WriteLine(";");
2733 if (mapping.TypeDesc.IsValueType)
2734 {
2735 base.Writer.WriteLine("if (rre != null) {");
2736 base.Writer.Indent++;
2737 }
2738 base.Writer.WriteLine("try {");
2739 base.Writer.Indent++;
2741 base.Writer.Write("rre");
2743 base.Writer.WriteLine(";");
2744 WriteCatchCastException(mapping.TypeDesc, "rre", null);
2745 base.Writer.Write("Referenced(");
2746 base.Writer.Write(source);
2747 base.Writer.WriteLine(");");
2748 if (mapping.TypeDesc.IsValueType)
2749 {
2750 base.Writer.Indent--;
2751 base.Writer.WriteLine("}");
2752 }
2753 }
2754 else
2755 {
2756 string s2 = ReferenceMapping(mapping);
2757 if (checkForNull)
2758 {
2759 base.Writer.Write("if ((object)(");
2760 base.Writer.Write(arrayName);
2761 base.Writer.Write(") == null) Reader.Skip(); else ");
2762 }
2764 base.Writer.Write(s2);
2765 base.Writer.Write("(");
2766 if (mapping.TypeDesc.IsNullable)
2767 {
2768 WriteBooleanValue(element.IsNullable);
2769 base.Writer.Write(", ");
2770 }
2771 base.Writer.Write("true");
2772 base.Writer.Write(")");
2774 base.Writer.WriteLine(";");
2775 }
2776 }
2777 else
2778 {
2779 if (!(element.Mapping is SpecialMapping))
2780 {
2782 }
2783 SpecialMapping specialMapping = (SpecialMapping)element.Mapping;
2784 switch (specialMapping.TypeDesc.Kind)
2785 {
2786 case TypeKind.Node:
2787 {
2788 bool flag2 = specialMapping.TypeDesc.FullName == typeof(XmlDocument).FullName;
2790 base.Writer.Write(flag2 ? "ReadXmlDocument(" : "ReadXmlNode(");
2791 base.Writer.Write(element.Any ? "false" : "true");
2792 base.Writer.Write(")");
2794 base.Writer.WriteLine(";");
2795 break;
2796 }
2797 case TypeKind.Serializable:
2798 {
2799 SerializableMapping serializableMapping = (SerializableMapping)element.Mapping;
2800 if (serializableMapping.DerivedMappings != null)
2801 {
2802 base.Writer.Write(typeof(XmlQualifiedName).FullName);
2803 base.Writer.WriteLine(" tser = GetXsiType();");
2804 base.Writer.Write("if (tser == null");
2805 base.Writer.Write(" || ");
2806 WriteQNameEqual("tser", serializableMapping.XsiType.Name, serializableMapping.XsiType.Namespace);
2807 base.Writer.WriteLine(") {");
2808 base.Writer.Indent++;
2809 }
2811 base.Writer.Write("ReadSerializable(( ");
2812 base.Writer.Write(typeof(IXmlSerializable).FullName);
2813 base.Writer.Write(")");
2814 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(serializableMapping.TypeDesc.CSharpName, serializableMapping.TypeDesc.UseReflection, serializableMapping.TypeDesc.CannotNew, cast: false));
2815 bool flag = !element.Any && XmlSerializationCodeGen.IsWildcard(serializableMapping);
2816 if (flag)
2817 {
2818 base.Writer.WriteLine(", true");
2819 }
2820 base.Writer.Write(")");
2822 base.Writer.WriteLine(";");
2823 if (serializableMapping.DerivedMappings != null)
2824 {
2825 base.Writer.Indent--;
2826 base.Writer.WriteLine("}");
2828 WriteUnknownNode("UnknownNode", "null", null, anyIfs: true);
2829 }
2830 break;
2831 }
2832 default:
2834 }
2835 }
2836 if (choice != null)
2837 {
2838 string cSharpName = choice.Mapping.TypeDesc.CSharpName;
2839 base.Writer.Write(choiceSource);
2840 base.Writer.Write(" = ");
2841 CodeIdentifier.CheckValidIdentifier(choice.MemberIds[elementIndex]);
2842 base.Writer.Write(base.RaCodeGen.GetStringForEnumMember(cSharpName, choice.MemberIds[elementIndex], choice.Mapping.TypeDesc.UseReflection));
2843 base.Writer.WriteLine(";");
2844 }
2845 }
static CultureInfo InvariantCulture
static string XmlInternalError
Definition SR.cs:1812
Definition SR.cs:7
XmlSerializationCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className)
void WriteCatchCastException(TypeDesc typeDesc, string source, string id)
void WriteArray(string source, string arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex)
void WriteDerivedSerializable(SerializableMapping head, SerializableMapping mapping, string source, bool isWrappedAny)
void WriteUnknownNode(string func, string node, ElementAccessor e, bool anyIfs)

References System.Xml.Serialization.Accessor.Any, System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Serialization.TypeDesc.CSharpName, System.Xml.Serialization.Accessor.Default, System.Xml.Dictionary, System.elementIndex, System.Xml.Serialization.TypeDesc.FormatterName, System.FullName, System.Globalization.CultureInfo.InvariantCulture, System.Xml.Serialization.ElementAccessor.IsNullable, System.Xml.Serialization.Mapping.IsSoap, System.Xml.Serialization.TypeDesc.IsValueType, System.Xml.Serialization.XmlSerializationCodeGen.IsWildcard(), System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.XmlSerializationCodeGen.ReferenceMapping(), System.s, System.source, System.Xml.Serialization.TypeDesc.Type, System.Xml.Serialization.TypeMapping.TypeDesc, System.Xml.Serialization.TypeDesc.UseReflection, System.DBNull.Value, System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteArray(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteBooleanValue(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteCatchCastException(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteDerivedSerializable(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteID(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WritePrimitive(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteQNameEqual(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceBegin(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceBeginTyped(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteSourceEnd(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteUnknownNode(), and System.SR.XmlInternalError.

Referenced by System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElementsElse(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElementsIf(), and System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteNullableMethod().