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

◆ WriteLiteralStructMethod()

void System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteLiteralStructMethod ( StructMapping structMapping)
inlineprivate

Definition at line 1244 of file XmlSerializationReaderCodeGen.cs.

1245 {
1246 string s = (string)base.MethodNames[structMapping];
1247 bool useReflection = structMapping.TypeDesc.UseReflection;
1248 string text = (useReflection ? "object" : structMapping.TypeDesc.CSharpName);
1249 base.Writer.WriteLine();
1250 base.Writer.Write(text);
1251 base.Writer.Write(" ");
1252 base.Writer.Write(s);
1253 base.Writer.Write("(");
1254 if (structMapping.TypeDesc.IsNullable)
1255 {
1256 base.Writer.Write("bool isNullable, ");
1257 }
1258 base.Writer.WriteLine("bool checkType) {");
1259 base.Writer.Indent++;
1260 base.Writer.Write(typeof(XmlQualifiedName).FullName);
1261 base.Writer.WriteLine(" xsiType = checkType ? GetXsiType() : null;");
1262 base.Writer.WriteLine("bool isNull = false;");
1263 if (structMapping.TypeDesc.IsNullable)
1264 {
1265 base.Writer.WriteLine("if (isNullable) isNull = ReadNull();");
1266 }
1267 base.Writer.WriteLine("if (checkType) {");
1268 if (structMapping.TypeDesc.IsRoot)
1269 {
1270 base.Writer.Indent++;
1271 base.Writer.WriteLine("if (isNull) {");
1272 base.Writer.Indent++;
1273 base.Writer.WriteLine("if (xsiType != null) return (" + text + ")ReadTypedNull(xsiType);");
1274 base.Writer.Write("else return ");
1275 if (structMapping.TypeDesc.IsValueType)
1276 {
1277 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(structMapping.TypeDesc.CSharpName, useReflection, ctorInaccessible: false, cast: false));
1278 base.Writer.WriteLine(";");
1279 }
1280 else
1281 {
1282 base.Writer.WriteLine("null;");
1283 }
1284 base.Writer.Indent--;
1285 base.Writer.WriteLine("}");
1286 }
1287 base.Writer.Write("if (xsiType == null");
1288 if (!structMapping.TypeDesc.IsRoot)
1289 {
1290 base.Writer.Write(" || ");
1291 WriteQNameEqual("xsiType", structMapping.TypeName, structMapping.Namespace);
1292 }
1293 base.Writer.WriteLine(") {");
1294 if (structMapping.TypeDesc.IsRoot)
1295 {
1296 base.Writer.Indent++;
1297 base.Writer.WriteLine("return ReadTypedPrimitive(new System.Xml.XmlQualifiedName(\"anyType\", \"http://www.w3.org/2001/XMLSchema\"));");
1298 base.Writer.Indent--;
1299 }
1300 base.Writer.WriteLine("}");
1301 base.Writer.WriteLine("else {");
1302 base.Writer.Indent++;
1304 if (structMapping.TypeDesc.IsRoot)
1305 {
1307 }
1308 if (structMapping.TypeDesc.IsRoot)
1309 {
1310 base.Writer.Write("return ReadTypedPrimitive((");
1311 }
1312 else
1313 {
1314 base.Writer.Write("throw CreateUnknownTypeException((");
1315 }
1316 base.Writer.Write(typeof(XmlQualifiedName).FullName);
1317 base.Writer.WriteLine(")xsiType);");
1318 base.Writer.Indent--;
1319 base.Writer.WriteLine("}");
1320 if (structMapping.TypeDesc.IsRoot)
1321 {
1322 base.Writer.Indent--;
1323 }
1324 base.Writer.WriteLine("}");
1325 if (structMapping.TypeDesc.IsNullable)
1326 {
1327 base.Writer.WriteLine("if (isNull) return null;");
1328 }
1329 if (structMapping.TypeDesc.IsAbstract)
1330 {
1331 base.Writer.Write("throw CreateAbstractTypeException(");
1333 base.Writer.Write(", ");
1335 base.Writer.WriteLine(");");
1336 }
1337 else
1338 {
1339 if (structMapping.TypeDesc.Type != null && typeof(XmlSchemaObject).IsAssignableFrom(structMapping.TypeDesc.Type))
1340 {
1341 base.Writer.WriteLine("DecodeName = false;");
1342 }
1344 MemberMapping[] settableMembers = TypeScope.GetSettableMembers(structMapping);
1345 Member member = null;
1346 Member member2 = null;
1347 Member member3 = null;
1348 bool flag = structMapping.HasExplicitSequence();
1352 for (int i = 0; i < settableMembers.Length; i++)
1353 {
1354 MemberMapping memberMapping = settableMembers[i];
1355 CodeIdentifier.CheckValidIdentifier(memberMapping.Name);
1356 string stringForMember = base.RaCodeGen.GetStringForMember("o", memberMapping.Name, structMapping.TypeDesc);
1358 if (!memberMapping.IsSequence)
1359 {
1360 member4.ParamsReadSource = $"paramsRead[{i}]";
1361 }
1362 member4.IsNullable = memberMapping.TypeDesc.IsNullable;
1363 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
1364 {
1365 member4.CheckSpecifiedSource = base.RaCodeGen.GetStringForMember("o", memberMapping.Name + "Specified", structMapping.TypeDesc);
1366 }
1367 if (memberMapping.Text != null)
1368 {
1369 member = member4;
1370 }
1371 if (memberMapping.Attribute != null && memberMapping.Attribute.Any)
1372 {
1373 member3 = member4;
1374 }
1375 if (!flag)
1376 {
1377 for (int j = 0; j < memberMapping.Elements.Length; j++)
1378 {
1379 if (memberMapping.Elements[j].Any && (memberMapping.Elements[j].Name == null || memberMapping.Elements[j].Name.Length == 0))
1380 {
1381 member2 = member4;
1382 break;
1383 }
1384 }
1385 }
1386 else if (memberMapping.IsParticle && !memberMapping.IsSequence)
1387 {
1388 structMapping.FindDeclaringMapping(memberMapping, out var declaringMapping, structMapping.TypeName);
1389 throw new InvalidOperationException(System.SR.Format(System.SR.XmlSequenceHierarchy, structMapping.TypeDesc.FullName, memberMapping.Name, declaringMapping.TypeDesc.FullName, "Order"));
1390 }
1391 if (memberMapping.Attribute == null && memberMapping.Elements.Length == 1 && memberMapping.Elements[0].Mapping is ArrayMapping)
1392 {
1394 member5.CheckSpecifiedSource = member4.CheckSpecifiedSource;
1395 list3.Add(member5);
1396 }
1397 else
1398 {
1399 list3.Add(member4);
1400 }
1401 if (!memberMapping.TypeDesc.IsArrayLike)
1402 {
1403 continue;
1404 }
1405 list.Add(member4);
1406 if (memberMapping.TypeDesc.IsArrayLike && (memberMapping.Elements.Length != 1 || !(memberMapping.Elements[0].Mapping is ArrayMapping)))
1407 {
1409 if (member4 != member && member4 != member2)
1410 {
1411 list2.Add(member4);
1412 }
1413 }
1414 else if (!memberMapping.TypeDesc.IsArray)
1415 {
1417 }
1418 }
1419 if (member2 != null)
1420 {
1421 list2.Add(member2);
1422 }
1423 if (member != null && member != member2)
1424 {
1425 list2.Add(member);
1426 }
1427 Member[] members = list.ToArray();
1428 Member[] members2 = list2.ToArray();
1429 Member[] members3 = list3.ToArray();
1432 WriteAttributes(members3, member3, "UnknownNode", "(object)o");
1433 if (member3 != null)
1434 {
1436 }
1437 base.Writer.WriteLine("Reader.MoveToElement();");
1438 base.Writer.WriteLine("if (Reader.IsEmptyElement) {");
1439 base.Writer.Indent++;
1440 base.Writer.WriteLine("Reader.Skip();");
1442 base.Writer.WriteLine("return o;");
1443 base.Writer.Indent--;
1444 base.Writer.WriteLine("}");
1445 base.Writer.WriteLine("Reader.ReadStartElement();");
1446 if (IsSequence(members3))
1447 {
1448 base.Writer.WriteLine("int state = 0;");
1449 }
1451 base.Writer.Indent++;
1452 string text2 = "UnknownNode((object)o, " + ExpectedElements(members3) + ");";
1454 base.Writer.WriteLine("Reader.MoveToContent();");
1457 base.Writer.WriteLine("ReadEndElement();");
1458 base.Writer.WriteLine("return o;");
1459 }
1460 base.Writer.Indent--;
1461 base.Writer.WriteLine("}");
1462 }
void Add(TKey key, TValue value)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlSequenceHierarchy
Definition SR.cs:1800
Definition SR.cs:7
void WriteAttributes(Member[] members, Member anyAttribute, string elseCall, string firstParam)
void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string returnTypeName)
void WriteMemberElements(Member[] members, string elementElseString, string elseString, Member anyElement, Member anyText, string checkTypeHrefsSource)
string GetChoiceIdentifierSource(MemberMapping[] mappings, MemberMapping member)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Serialization.CodeIdentifier.CheckValidIdentifier(), System.Xml.Dictionary, System.Xml.Serialization.XmlSerializationReaderCodeGen.ExpectedElements(), System.SR.Format(), System.FullName, System.Xml.Serialization.XmlSerializationReaderCodeGen.GetChoiceIdentifierSource(), System.Xml.Serialization.TypeScope.GetSettableMembers(), System.Xml.Serialization.XmlSerializationReaderCodeGen.IsSequence(), System.list, System.s, System.text, System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteAttributes(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteCreateMapping(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteDerivedTypes(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteEnumAndArrayTypes(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberBegin(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberElements(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteMemberEnd(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteParamsRead(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteQNameEqual(), System.Xml.Serialization.XmlSerializationCodeGen.WriteQuotedCSharpString(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteWhileLoopEnd(), System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteWhileNotLoopStart(), and System.SR.XmlSequenceHierarchy.

Referenced by System.Xml.Serialization.XmlSerializationReaderCodeGen.WriteStructMethod().