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

◆ WriteMember() [1/2]

void System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteMember ( string source,
AttributeAccessor attribute,
TypeDesc memberTypeDesc,
string parent )
inlineprivate

Definition at line 1022 of file XmlSerializationWriterCodeGen.cs.

1023 {
1024 if (memberTypeDesc.IsAbstract)
1025 {
1026 return;
1027 }
1028 if (memberTypeDesc.IsArrayLike)
1029 {
1030 base.Writer.WriteLine("{");
1031 base.Writer.Indent++;
1032 string cSharpName = memberTypeDesc.CSharpName;
1034 if (memberTypeDesc.IsNullable)
1035 {
1036 base.Writer.WriteLine("if (a != null) {");
1037 base.Writer.Indent++;
1038 }
1039 if (attribute.IsList)
1040 {
1041 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1042 {
1043 base.Writer.Write("Writer.WriteStartAttribute(null, ");
1045 base.Writer.Write(", ");
1046 string text = ((attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : string.Empty);
1047 if (text != null)
1048 {
1050 }
1051 else
1052 {
1053 base.Writer.Write("null");
1054 }
1055 base.Writer.WriteLine(");");
1056 }
1057 else
1058 {
1059 base.Writer.Write(typeof(StringBuilder).FullName);
1060 base.Writer.Write(" sb = new ");
1061 base.Writer.Write(typeof(StringBuilder).FullName);
1062 base.Writer.WriteLine("();");
1063 }
1064 }
1065 TypeDesc arrayElementTypeDesc = memberTypeDesc.ArrayElementTypeDesc;
1066 if (memberTypeDesc.IsEnumerable)
1067 {
1068 base.Writer.Write(" e = ");
1069 base.Writer.Write(typeof(IEnumerator).FullName);
1070 if (memberTypeDesc.IsPrivateImplementation)
1071 {
1072 base.Writer.Write("((");
1073 base.Writer.Write(typeof(IEnumerable).FullName);
1074 base.Writer.WriteLine(").GetEnumerator();");
1075 }
1076 else if (memberTypeDesc.IsGenericInterface)
1077 {
1078 if (memberTypeDesc.UseReflection)
1079 {
1080 base.Writer.Write("(");
1081 base.Writer.Write(typeof(IEnumerator).FullName);
1082 base.Writer.Write(")");
1083 base.Writer.Write(base.RaCodeGen.GetReflectionVariable(memberTypeDesc.CSharpName, "System.Collections.Generic.IEnumerable*"));
1084 base.Writer.WriteLine(".Invoke(a, new object[0]);");
1085 }
1086 else
1087 {
1088 base.Writer.Write("((System.Collections.Generic.IEnumerable<");
1089 base.Writer.Write(arrayElementTypeDesc.CSharpName);
1090 base.Writer.WriteLine(">)a).GetEnumerator();");
1091 }
1092 }
1093 else
1094 {
1095 if (memberTypeDesc.UseReflection)
1096 {
1097 base.Writer.Write("(");
1098 base.Writer.Write(typeof(IEnumerator).FullName);
1099 base.Writer.Write(")");
1100 }
1101 base.Writer.Write(base.RaCodeGen.GetStringForMethodInvoke("a", memberTypeDesc.CSharpName, "GetEnumerator", memberTypeDesc.UseReflection));
1102 base.Writer.WriteLine(";");
1103 }
1104 base.Writer.WriteLine("if (e != null)");
1105 base.Writer.WriteLine("while (e.MoveNext()) {");
1106 base.Writer.Indent++;
1107 string cSharpName2 = arrayElementTypeDesc.CSharpName;
1108 WriteLocalDecl(cSharpName2, "ai", "e.Current", arrayElementTypeDesc.UseReflection);
1109 }
1110 else
1111 {
1112 base.Writer.Write("for (int i = 0; i < ");
1113 if (memberTypeDesc.IsArray)
1114 {
1115 base.Writer.WriteLine("a.Length; i++) {");
1116 }
1117 else
1118 {
1119 base.Writer.Write("((");
1120 base.Writer.Write(typeof(ICollection).FullName);
1121 base.Writer.WriteLine(")a).Count; i++) {");
1122 }
1123 base.Writer.Indent++;
1124 string cSharpName3 = arrayElementTypeDesc.CSharpName;
1125 WriteLocalDecl(cSharpName3, "ai", base.RaCodeGen.GetStringForArrayMember("a", "i", memberTypeDesc), arrayElementTypeDesc.UseReflection);
1126 }
1127 if (attribute.IsList)
1128 {
1129 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1130 {
1131 base.Writer.WriteLine("if (i != 0) Writer.WriteString(\" \");");
1132 base.Writer.Write("WriteValue(");
1133 }
1134 else
1135 {
1136 base.Writer.WriteLine("if (i != 0) sb.Append(\" \");");
1137 base.Writer.Write("sb.Append(");
1138 }
1139 if (attribute.Mapping is EnumMapping)
1140 {
1141 WriteEnumValue((EnumMapping)attribute.Mapping, "ai");
1142 }
1143 else
1144 {
1146 }
1147 base.Writer.WriteLine(");");
1148 }
1149 else
1150 {
1151 WriteAttribute("ai", attribute, parent);
1152 }
1153 base.Writer.Indent--;
1154 base.Writer.WriteLine("}");
1155 if (attribute.IsList)
1156 {
1157 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1158 {
1159 base.Writer.WriteLine("Writer.WriteEndAttribute();");
1160 }
1161 else
1162 {
1163 base.Writer.WriteLine("if (sb.Length != 0) {");
1164 base.Writer.Indent++;
1165 base.Writer.Write("WriteAttribute(");
1167 base.Writer.Write(", ");
1168 string text2 = ((attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : string.Empty);
1169 if (text2 != null)
1170 {
1172 base.Writer.Write(", ");
1173 }
1174 base.Writer.WriteLine("sb.ToString());");
1175 base.Writer.Indent--;
1176 base.Writer.WriteLine("}");
1177 }
1178 }
1179 if (memberTypeDesc.IsNullable)
1180 {
1181 base.Writer.Indent--;
1182 base.Writer.WriteLine("}");
1183 }
1184 base.Writer.Indent--;
1185 base.Writer.WriteLine("}");
1186 }
1187 else
1188 {
1190 }
1191 }
void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
void WritePrimitiveValue(TypeDesc typeDesc, string source, bool isElement)
void WriteLocalDecl(string typeName, string variableName, string initValue, bool useReflection)
void WriteAttribute(string source, AttributeAccessor attribute, string parent)

References System.Xml.Serialization.TypeDesc.ArrayElementTypeDesc, System.Xml.Serialization.XmlSerializationWriterCodeGen.CanOptimizeWriteListSequence(), System.Xml.Serialization.TypeDesc.CSharpName, System.Xml.Dictionary, System.FullName, System.source, System.text, System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteArrayLocalDecl(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteAttribute(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteEnumValue(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteLocalDecl(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WritePrimitiveValue(), and System.Xml.Serialization.XmlSerializationCodeGen.WriteQuotedCSharpString().

Referenced by System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateMembersElement(), System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateTypeElement(), System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteEnumAndArrayTypes(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteStructMethod().