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

◆ WriteLiteralStructMethod()

object System.Xml.Serialization.ReflectionXmlSerializationReader.WriteLiteralStructMethod ( StructMapping structMapping,
bool isNullable,
bool checkType,
string defaultNamespace )
inlineprivate

Definition at line 1357 of file ReflectionXmlSerializationReader.cs.

1358 {
1359 XmlQualifiedName xmlQualifiedName = (checkType ? GetXsiType() : null);
1360 bool flag = false;
1361 if (isNullable)
1362 {
1363 flag = ReadNull();
1364 }
1365 if (checkType)
1366 {
1367 if (structMapping.TypeDesc.IsRoot && flag)
1368 {
1369 if (xmlQualifiedName != null)
1370 {
1372 }
1373 if (structMapping.TypeDesc.IsValueType)
1374 {
1375 return ReflectionCreateObject(structMapping.TypeDesc.Type);
1376 }
1377 return null;
1378 }
1379 object o2 = null;
1380 if (!(xmlQualifiedName == null) && (structMapping.TypeDesc.IsRoot || !QNameEqual(xmlQualifiedName, structMapping.TypeName, structMapping.Namespace, defaultNamespace)))
1381 {
1383 {
1384 return o2;
1385 }
1386 if (structMapping.TypeDesc.IsRoot && WriteEnumAndArrayTypes(out o2, structMapping, xmlQualifiedName, defaultNamespace))
1387 {
1388 return o2;
1389 }
1390 if (structMapping.TypeDesc.IsRoot)
1391 {
1393 }
1395 }
1396 if (structMapping.TypeDesc.IsRoot)
1397 {
1398 return ReadTypedPrimitive(new XmlQualifiedName("anyType", "http://www.w3.org/2001/XMLSchema"));
1399 }
1400 }
1401 if (structMapping.TypeDesc.IsNullable && flag)
1402 {
1403 return null;
1404 }
1405 if (structMapping.TypeDesc.IsAbstract)
1406 {
1407 throw CreateAbstractTypeException(structMapping.TypeName, structMapping.Namespace);
1408 }
1409 if (structMapping.TypeDesc.Type != null && typeof(XmlSchemaObject).IsAssignableFrom(structMapping.TypeDesc.Type))
1410 {
1411 throw new NotImplementedException("XmlSchemaObject");
1412 }
1413 object o = ReflectionCreateObject(structMapping.TypeDesc.Type);
1414 MemberMapping[] settableMembers = TypeScope.GetSettableMembers(structMapping);
1415 MemberMapping memberMapping = null;
1416 MemberMapping memberMapping2 = null;
1417 Member anyAttribute = null;
1418 Member anyElement = null;
1419 Member anyText = null;
1420 bool flag2 = structMapping.HasExplicitSequence();
1423 foreach (MemberMapping memberMapping3 in settableMembers)
1424 {
1425 Member member = new Member(memberMapping3);
1426 if (memberMapping3.Text != null)
1427 {
1429 }
1430 if (memberMapping3.Attribute != null)
1431 {
1432 member.Source = Wrapper;
1433 if (memberMapping3.Attribute.Any)
1434 {
1435 anyAttribute = member;
1436 }
1437 }
1438 if (!flag2)
1439 {
1440 for (int j = 0; j < memberMapping3.Elements.Length; j++)
1441 {
1442 if (memberMapping3.Elements[j].Any && (memberMapping3.Elements[j].Name == null || memberMapping3.Elements[j].Name.Length == 0))
1443 {
1445 break;
1446 }
1447 }
1448 }
1449 else if (memberMapping3.IsParticle && !memberMapping3.IsSequence)
1450 {
1451 structMapping.FindDeclaringMapping(memberMapping3, out var declaringMapping, structMapping.TypeName);
1452 throw new InvalidOperationException(System.SR.Format(System.SR.XmlSequenceHierarchy, structMapping.TypeDesc.FullName, memberMapping3.Name, declaringMapping.TypeDesc.FullName, "Order"));
1453 }
1454 if (memberMapping3.TypeDesc.IsArrayLike)
1455 {
1456 if (member.Source == null && memberMapping3.TypeDesc.IsArrayLike && (memberMapping3.Elements.Length != 1 || !(memberMapping3.Elements[0].Mapping is ArrayMapping)))
1457 {
1458 member.Source = delegate(object item)
1459 {
1460 if (member.Collection == null)
1461 {
1462 member.Collection = new CollectionMember();
1463 }
1464 member.Collection.Add(item);
1465 };
1466 member.ArraySource = member.Source;
1467 }
1468 else
1469 {
1470 _ = memberMapping3.TypeDesc.IsArray;
1471 }
1472 }
1473 if (member.Source == null)
1474 {
1476 if (pi != null && typeof(IList).IsAssignableFrom(pi.PropertyType) && (pi.SetMethod == null || !pi.SetMethod.IsPublic))
1477 {
1478 member.Source = delegate(object value)
1479 {
1480 IList list3 = (IList)pi.GetValue(o);
1481 if (value is IList list4)
1482 {
1483 {
1484 foreach (object item in list4)
1485 {
1486 list3.Add(item);
1487 }
1488 return;
1489 }
1490 }
1491 list3.Add(value);
1492 };
1493 }
1494 else if (member.Mapping.Xmlns != null)
1495 {
1496 XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
1499 member.XmlnsSource = delegate(string ns, string name)
1500 {
1501 xmlSerializerNamespaces.Add(ns, name);
1502 };
1503 }
1504 else
1505 {
1507 member.Source = delegate(object value)
1508 {
1510 };
1511 }
1512 }
1513 if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
1514 {
1516 }
1517 ChoiceIdentifierAccessor choice = memberMapping3.ChoiceIdentifier;
1518 if (choice != null && o != null)
1519 {
1520 member.ChoiceSource = Wrapper;
1521 }
1523 list.Add(member);
1525 {
1526 anyElement = member;
1527 }
1528 else if (memberMapping3 == memberMapping)
1529 {
1530 anyText = member;
1531 }
1532 [RequiresUnreferencedCode("calls SetOrAddValueToMember")]
1533 void Wrapper(object value)
1534 {
1535 SetOrAddValueToMember(o, value, member.Mapping.MemberInfo);
1536 }
1537 [RequiresUnreferencedCode("calls GetType on object")]
1538 void Wrapper(object _)
1539 {
1540 string text3 = member.Mapping.Name + "Specified";
1541 MethodInfo method = o.GetType().GetMethod("set_" + text3);
1542 if (method != null)
1543 {
1544 method.Invoke(o, new object[1] { true });
1545 }
1546 }
1547 [RequiresUnreferencedCode("Calls SetOrAddValueToMember")]
1548 void Wrapper(object elementNameObject)
1549 {
1551 string[] memberIds = choice.MemberIds;
1552 foreach (string text2 in memberIds)
1553 {
1554 if (text2 == text)
1555 {
1556 object value2 = Enum.Parse(choice.Mapping.TypeDesc.Type, text2);
1557 SetOrAddValueToMember(o, value2, choice.MemberInfo);
1558 break;
1559 }
1560 }
1561 }
1562 }
1563 Member[] array = list.ToArray();
1565 {
1566 UnknownNode(o);
1567 };
1569 base.Reader.MoveToElement();
1570 if (base.Reader.IsEmptyElement)
1571 {
1572 base.Reader.Skip();
1573 return o;
1574 }
1575 base.Reader.ReadStartElement();
1576 bool flag3 = IsSequence(array);
1578 Member[] array2 = array;
1579 foreach (Member member2 in array2)
1580 {
1581 if (member2.Collection != null)
1582 {
1583 MemberInfo[] member3 = o.GetType().GetMember(member2.Mapping.Name);
1585 object collection = null;
1586 SetCollectionObjectWithCollectionMember(ref collection, member2.Collection, member2.Mapping.TypeDesc.Type);
1589 }
1590 }
1592 return o;
1593 }
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
static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate GetSetMemberValueDelegate(object o, string memberName)
void SetCollectionObjectWithCollectionMember([NotNull] ref object collection, CollectionMember collectionMember, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors|DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type collectionType)
object ReflectionCreateObject([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors|DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type type)
bool WriteDerivedTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace, bool checkType, bool isNullable)
bool QNameEqual(XmlQualifiedName xsiType, string name, string ns, string defaultNamespace)
void WriteAttributes(Member[] members, Member anyAttribute, UnknownNodeAction elseCall, ref object o)
void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo)
bool WriteEnumAndArrayTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace)
void WriteMembers(ref object o, Member[] members, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member anyElement, Member anyText)
Exception CreateUnknownTypeException(XmlQualifiedName type)
Exception CreateAbstractTypeException(string name, string? ns)
delegate void UnknownNodeAction(object o)

References System.Collections.Generic.List< T >.Add(), System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.array, System.Xml.Serialization.MemberMapping.CheckSpecified, System.collection, System.Xml.Serialization.ReflectionXmlSerializationReader.Member.Collection, System.Xml.Serialization.XmlSerializationReader.CreateAbstractTypeException(), System.Xml.Serialization.XmlSerializationReader.CreateUnknownTypeException(), System.Xml.Dictionary, System.SR.Format(), System.Xml.Serialization.ReflectionXmlSerializationReader.GetSetMemberValueDelegate(), System.Xml.Serialization.TypeScope.GetSettableMembers(), System.Xml.Serialization.XmlSerializationReader.GetXsiType(), System.Xml.Serialization.ReflectionXmlSerializationReader.IsSequence(), System.item, System.list, System.Xml.Serialization.ReflectionXmlSerializationReader.Member.Mapping, System.Xml.Serialization.MemberMapping.MemberInfo, System.Xml.Serialization.MemberMapping.Name, System.Enum.Parse(), System.Xml.Serialization.ReflectionXmlSerializationReader.QNameEqual(), System.Xml.Serialization.XmlSerializationReader.ReadEndElement(), System.Xml.Serialization.XmlSerializationReader.ReadNull(), System.Xml.Serialization.XmlSerializationReader.ReadTypedNull(), System.Xml.Serialization.XmlSerializationReader.ReadTypedPrimitive(), System.Xml.Serialization.ReflectionXmlSerializationReader.ReflectionCreateObject(), System.Xml.Serialization.ReflectionXmlSerializationReader.SetCollectionObjectWithCollectionMember(), System.Xml.Serialization.ReflectionXmlSerializationReader.SetOrAddValueToMember(), System.Xml.Serialization.ReflectionXmlSerializationReader.Member.Source, System.text, System.Xml.Serialization.XmlSerializationReader.UnknownNode(), System.Xml.Serialization.UnknownNodeAction(), System.value, System.Xml.Serialization.ReflectionXmlSerializationReader.WriteAttributes(), System.Xml.Serialization.ReflectionXmlSerializationReader.WriteDerivedTypes(), System.Xml.Serialization.ReflectionXmlSerializationReader.WriteEnumAndArrayTypes(), System.Xml.Serialization.ReflectionXmlSerializationReader.WriteMembers(), System.Xml.Serialization.AccessorMapping.Xmlns, and System.SR.XmlSequenceHierarchy.

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