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

◆ WriteStructMethod()

void System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteStructMethod ( StructMapping mapping)
inlineprivate

Definition at line 800 of file XmlSerializationWriterCodeGen.cs.

801 {
802 if (mapping.IsSoap && mapping.TypeDesc.IsRoot)
803 {
804 return;
805 }
806 string s = (string)base.MethodNames[mapping];
807 base.Writer.WriteLine();
808 base.Writer.Write("void ");
809 base.Writer.Write(s);
810 string cSharpName = mapping.TypeDesc.CSharpName;
811 if (mapping.IsSoap)
812 {
813 base.Writer.WriteLine("(object s) {");
814 base.Writer.Indent++;
815 WriteLocalDecl(cSharpName, "o", "s", mapping.TypeDesc.UseReflection);
816 }
817 else
818 {
819 base.Writer.Write("(string n, string ns, ");
820 base.Writer.Write(mapping.TypeDesc.UseReflection ? "object" : cSharpName);
821 base.Writer.Write(" o");
822 if (mapping.TypeDesc.IsNullable)
823 {
824 base.Writer.Write(", bool isNullable");
825 }
826 base.Writer.WriteLine(", bool needType) {");
827 base.Writer.Indent++;
828 if (mapping.TypeDesc.IsNullable)
829 {
830 base.Writer.WriteLine("if ((object)o == null) {");
831 base.Writer.Indent++;
832 base.Writer.WriteLine("if (isNullable) WriteNullTagLiteral(n, ns);");
833 base.Writer.WriteLine("return;");
834 base.Writer.Indent--;
835 base.Writer.WriteLine("}");
836 }
837 base.Writer.WriteLine("if (!needType) {");
838 base.Writer.Indent++;
839 base.Writer.Write(typeof(Type).FullName);
840 base.Writer.WriteLine(" t = o.GetType();");
841 base.Writer.Write("if (");
842 WriteTypeCompare("t", cSharpName, mapping.TypeDesc.UseReflection);
843 base.Writer.WriteLine(") {");
844 base.Writer.WriteLine("}");
845 base.Writer.WriteLine("else {");
846 base.Writer.Indent++;
848 if (mapping.TypeDesc.IsRoot)
849 {
851 }
852 if (mapping.TypeDesc.IsRoot)
853 {
854 base.Writer.WriteLine("WriteTypedPrimitive(n, ns, o, true);");
855 base.Writer.WriteLine("return;");
856 }
857 else
858 {
859 base.Writer.WriteLine("throw CreateUnknownTypeException(o);");
860 }
861 base.Writer.Indent--;
862 base.Writer.WriteLine("}");
863 base.Writer.Indent--;
864 base.Writer.WriteLine("}");
865 }
866 if (!mapping.TypeDesc.IsAbstract)
867 {
868 if (mapping.TypeDesc.Type != null && typeof(XmlSchemaObject).IsAssignableFrom(mapping.TypeDesc.Type))
869 {
870 base.Writer.WriteLine("EscapeName = false;");
871 }
872 string text = null;
873 MemberMapping[] allMembers = TypeScope.GetAllMembers(mapping);
874 int num = FindXmlnsIndex(allMembers);
875 if (num >= 0)
876 {
877 MemberMapping memberMapping = allMembers[num];
878 CodeIdentifier.CheckValidIdentifier(memberMapping.Name);
879 text = base.RaCodeGen.GetStringForMember("o", memberMapping.Name, mapping.TypeDesc);
880 if (mapping.TypeDesc.UseReflection)
881 {
882 text = "((" + memberMapping.TypeDesc.CSharpName + ")" + text + ")";
883 }
884 }
885 if (!mapping.IsSoap)
886 {
887 base.Writer.Write("WriteStartElement(n, ns, o, false, ");
888 if (text == null)
889 {
890 base.Writer.Write("null");
891 }
892 else
893 {
894 base.Writer.Write(text);
895 }
896 base.Writer.WriteLine(");");
897 if (!mapping.TypeDesc.IsRoot)
898 {
899 base.Writer.Write("if (needType) WriteXsiType(");
901 base.Writer.Write(", ");
903 base.Writer.WriteLine(");");
904 }
905 }
906 else if (text != null)
907 {
909 }
910 foreach (MemberMapping memberMapping2 in allMembers)
911 {
912 if (memberMapping2.Attribute == null)
913 {
914 continue;
915 }
916 CodeIdentifier.CheckValidIdentifier(memberMapping2.Name);
917 if (memberMapping2.CheckShouldPersist)
918 {
919 base.Writer.Write("if (");
920 string text2 = base.RaCodeGen.GetStringForMethodInvoke("o", cSharpName, "ShouldSerialize" + memberMapping2.Name, mapping.TypeDesc.UseReflection);
921 if (mapping.TypeDesc.UseReflection)
922 {
923 text2 = "((" + typeof(bool).FullName + ")" + text2 + ")";
924 }
925 base.Writer.Write(text2);
926 base.Writer.WriteLine(") {");
927 base.Writer.Indent++;
928 }
929 if (memberMapping2.CheckSpecified != 0)
930 {
931 base.Writer.Write("if (");
932 string text3 = base.RaCodeGen.GetStringForMember("o", memberMapping2.Name + "Specified", mapping.TypeDesc);
933 if (mapping.TypeDesc.UseReflection)
934 {
935 text3 = "((" + typeof(bool).FullName + ")" + text3 + ")";
936 }
937 base.Writer.Write(text3);
938 base.Writer.WriteLine(") {");
939 base.Writer.Indent++;
940 }
941 WriteMember(base.RaCodeGen.GetStringForMember("o", memberMapping2.Name, mapping.TypeDesc), memberMapping2.Attribute, memberMapping2.TypeDesc, "o");
942 if (memberMapping2.CheckSpecified != 0)
943 {
944 base.Writer.Indent--;
945 base.Writer.WriteLine("}");
946 }
947 if (memberMapping2.CheckShouldPersist)
948 {
949 base.Writer.Indent--;
950 base.Writer.WriteLine("}");
951 }
952 }
953 foreach (MemberMapping memberMapping3 in allMembers)
954 {
955 if (memberMapping3.Xmlns != null)
956 {
957 continue;
958 }
959 CodeIdentifier.CheckValidIdentifier(memberMapping3.Name);
961 if (flag)
962 {
963 base.Writer.Write("if (");
964 string text4 = base.RaCodeGen.GetStringForMethodInvoke("o", cSharpName, "ShouldSerialize" + memberMapping3.Name, mapping.TypeDesc.UseReflection);
965 if (mapping.TypeDesc.UseReflection)
966 {
967 text4 = "((" + typeof(bool).FullName + ")" + text4 + ")";
968 }
969 base.Writer.Write(text4);
970 base.Writer.WriteLine(") {");
971 base.Writer.Indent++;
972 }
973 if (memberMapping3.CheckSpecified != 0)
974 {
975 base.Writer.Write("if (");
976 string text5 = base.RaCodeGen.GetStringForMember("o", memberMapping3.Name + "Specified", mapping.TypeDesc);
977 if (mapping.TypeDesc.UseReflection)
978 {
979 text5 = "((" + typeof(bool).FullName + ")" + text5 + ")";
980 }
981 base.Writer.Write(text5);
982 base.Writer.WriteLine(") {");
983 base.Writer.Indent++;
984 }
985 string choiceSource = null;
986 if (memberMapping3.ChoiceIdentifier != null)
987 {
988 CodeIdentifier.CheckValidIdentifier(memberMapping3.ChoiceIdentifier.MemberName);
989 choiceSource = base.RaCodeGen.GetStringForMember("o", memberMapping3.ChoiceIdentifier.MemberName, mapping.TypeDesc);
990 }
991 WriteMember(base.RaCodeGen.GetStringForMember("o", memberMapping3.Name, mapping.TypeDesc), choiceSource, memberMapping3.ElementsSortedByDerivation, memberMapping3.Text, memberMapping3.ChoiceIdentifier, memberMapping3.TypeDesc, writeAccessors: true);
992 if (memberMapping3.CheckSpecified != 0)
993 {
994 base.Writer.Indent--;
995 base.Writer.WriteLine("}");
996 }
997 if (flag)
998 {
999 base.Writer.Indent--;
1000 base.Writer.WriteLine("}");
1001 }
1002 }
1003 if (!mapping.IsSoap)
1004 {
1005 WriteEndElement("o");
1006 }
1007 }
1008 base.Writer.Indent--;
1009 base.Writer.WriteLine("}");
1010 }
void WriteMember(string source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent)
void WriteTypeCompare(string variable, string escapedTypeName, bool useReflection)
void WriteLocalDecl(string typeName, string variableName, string initValue, bool useReflection)

References System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Dictionary, System.Xml.Serialization.XmlSerializationWriterCodeGen.FindXmlnsIndex(), System.Xml.Serialization.TypeScope.GetAllMembers(), System.s, System.text, System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteDerivedTypes(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteEndElement(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteEnumAndArrayTypes(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteLocalDecl(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteMember(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteNamespaces(), System.Xml.Serialization.XmlSerializationCodeGen.WriteQuotedCSharpString(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteTypeCompare().

Referenced by System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateBegin(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateMethod().