Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionXmlSerializationReader.cs
Go to the documentation of this file.
7
9
11{
12 internal sealed class CollectionMember : List<object>
13 {
14 }
15
16 internal sealed class Member
17 {
19
21
22 public int FixupIndex = -1;
23
24 public bool MultiRef;
25
27
29
31
33
35
37
39 {
41 }
42 }
43
44 internal sealed class CheckTypeSource
45 {
46 public string Id { get; set; }
47
48 public bool IsObject { get; set; }
49
50 public Type Type { get; set; }
51
52 public object RefObject { get; set; }
53 }
54
55 internal sealed class ObjectHolder
56 {
57 public object Object;
58 }
59
60 private readonly XmlMapping _mapping;
61
63
64 internal static TypeDesc StringTypeDesc { get; } = new TypeScope().GetTypeDesc(typeof(string));
65
66
68
69
75
76 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
77 protected override void InitCallbacks()
78 {
79 TypeScope scope = _mapping.Scope;
80 foreach (TypeMapping typeMapping in scope.TypeMappings)
81 {
83 {
85 }
86 }
87 }
88
89 protected override void InitIDs()
90 {
91 }
92
93 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
94 public object ReadObject()
95 {
97 if (!mapping.IsReadable)
98 {
99 return null;
100 }
101 if (!mapping.GenerateSerializer)
102 {
103 throw new ArgumentException(System.SR.Format(System.SR.XmlInternalError, "xmlMapping"));
104 }
106 {
108 }
110 {
112 }
113 throw new ArgumentException(System.SR.Format(System.SR.XmlInternalError, "xmlMapping"));
114 }
115
116 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
125
126 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
128 {
130 MemberMapping[] members = ((MembersMapping)accessor.Mapping).Members;
131 bool hasWrapperElement = ((MembersMapping)accessor.Mapping).HasWrapperElement;
132 base.Reader.MoveToContent();
133 object[] array = new object[members.Length];
136 {
137 string name = accessor.Name;
138 string text = ((accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : string.Empty);
139 base.Reader.MoveToContent();
140 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
141 {
142 if (base.Reader.IsStartElement(accessor.Name, text))
143 {
145 {
146 continue;
147 }
149 }
150 else
151 {
152 UnknownNode(null, text + ":" + name);
153 }
154 base.Reader.MoveToContent();
155 }
156 }
157 else
158 {
160 }
161 return array;
162 }
163
164 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
166 {
167 Member anyText = null;
168 Member anyElement = null;
169 Member member = null;
173 for (int i = 0; i < mappings.Length; i++)
174 {
175 int index = i;
178 {
179 p[index] = o;
180 };
183 if (memberMapping.Xmlns != null)
184 {
186 p[index] = xmlns;
187 member2.XmlnsSource = delegate(string ns, string name)
188 {
189 xmlns.Add(ns, name);
190 };
191 }
194 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
195 {
196 string text = memberMapping.Name + "Specified";
197 for (int j = 0; j < mappings.Length; j++)
198 {
199 if (mappings[j].Name == text)
200 {
201 int indexJ = j;
203 {
204 p[indexJ] = o;
205 };
206 }
207 }
208 }
209 bool flag = false;
210 if (memberMapping.Text != null)
211 {
213 }
214 if (memberMapping.Attribute != null && memberMapping.Attribute.Any)
215 {
219 {
220 anyMember.Collection.Add(item);
221 };
222 member = anyMember;
223 }
224 if (memberMapping.Attribute != null || memberMapping.Xmlns != null)
225 {
227 }
228 else if (memberMapping.Text != null)
229 {
231 }
232 if (!memberMapping.IsSequence)
233 {
234 for (int k = 0; k < memberMapping.Elements.Length; k++)
235 {
236 if (!memberMapping.Elements[k].Any || memberMapping.Elements[k].Name.Length != 0)
237 {
238 continue;
239 }
241 if (memberMapping.Attribute == null && memberMapping.Text == null)
242 {
245 {
246 anyMember.Collection.Add(item);
247 };
249 }
250 flag = true;
251 break;
252 }
253 }
254 if (memberMapping.Attribute != null || memberMapping.Text != null || flag)
255 {
256 list.Add(anyMember);
257 }
258 else if (memberMapping.TypeDesc.IsArrayLike && (memberMapping.Elements.Length != 1 || !(memberMapping.Elements[0].Mapping is ArrayMapping)))
259 {
262 {
263 anyMember.Collection.Add(item);
264 };
267 }
268 else
269 {
271 }
272 }
273 Member[] array = list.ToArray();
274 Member[] array2 = list2.ToArray();
275 if (array.Length != 0 && array[0].Mapping.IsReturnValue)
276 {
277 base.IsReturnValue = true;
278 }
279 if (list3.Count > 0)
280 {
281 Member[] members = list3.ToArray();
282 object o2 = null;
283 WriteAttributes(members, member, base.UnknownNode, ref o2);
284 base.Reader.MoveToElement();
285 }
287 {
288 if (base.Reader.IsEmptyElement)
289 {
290 base.Reader.Skip();
291 base.Reader.MoveToContent();
292 return false;
293 }
294 base.Reader.ReadStartElement();
295 }
296 base.Reader.MoveToContent();
297 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
298 {
299 WriteMemberElements(array, base.UnknownNode, base.UnknownNode, anyElement, anyText);
300 base.Reader.MoveToContent();
301 }
302 Member[] array3 = array2;
303 foreach (Member member3 in array3)
304 {
305 object collection = null;
306 SetCollectionObjectWithCollectionMember(ref collection, member3.Collection, member3.Mapping.TypeDesc.Type);
307 member3.Source(collection);
308 }
309 if (member != null)
310 {
311 object collection2 = null;
312 SetCollectionObjectWithCollectionMember(ref collection2, member.Collection, member.Mapping.TypeDesc.Type);
313 member.ArraySource(collection2);
314 }
315 return true;
316 }
317
318 private void InitializeValueTypes(object[] p, MemberMapping[] mappings)
319 {
320 for (int i = 0; i < mappings.Length; i++)
321 {
323 {
324 if (mappings[i].TypeDesc.IsOptionalValue && mappings[i].TypeDesc.BaseTypeDesc.UseReflection)
325 {
326 p[i] = null;
327 }
328 else
329 {
331 }
332 }
333 }
334 }
335
336 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
338 {
342 bool hasWrapperElement = membersMapping.HasWrapperElement;
343 bool writeAccessors = membersMapping.WriteAccessors;
344 base.Reader.MoveToContent();
345 object[] p = new object[members.Length];
347 bool flag = true;
349 {
350 base.Reader.MoveToContent();
351 while (base.Reader.NodeType == XmlNodeType.Element)
352 {
353 string attribute = base.Reader.GetAttribute("root", "http://schemas.xmlsoap.org/soap/encoding/");
354 if (attribute == null || XmlConvert.ToBoolean(attribute))
355 {
356 break;
357 }
359 base.Reader.MoveToContent();
360 }
361 if (membersMapping.ValidateRpcWrapperElement)
362 {
363 string name = accessor.Name;
364 string ns = ((accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : string.Empty);
365 if (!XmlNodeEqual(base.Reader, name, ns))
366 {
368 }
369 }
370 flag = base.Reader.IsEmptyElement;
371 base.Reader.ReadStartElement();
372 }
373 Member[] array = new Member[members.Length];
374 for (int i = 0; i < members.Length; i++)
375 {
376 int index = i;
378 Member member = new Member(memberMapping);
380 {
381 p[index] = value;
382 };
383 array[index] = member;
384 if (memberMapping.CheckSpecified != SpecifiedAccessor.ReadWrite)
385 {
386 continue;
387 }
388 string text = memberMapping.Name + "Specified";
389 for (int j = 0; j < members.Length; j++)
390 {
391 if (members[j].Name == text)
392 {
395 {
397 };
398 break;
399 }
400 }
401 }
403 if (array.Length != 0 && array[0].Mapping.IsReturnValue)
404 {
405 base.IsReturnValue = true;
406 }
409 {
411 }
412 base.Reader.MoveToContent();
413 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
414 {
416 {
417 UnknownNode(p);
418 }));
420 {
421 UnknownNode(p);
422 }, null, null, fixup, list);
423 base.Reader.MoveToContent();
424 }
425 if (!flag)
426 {
428 }
429 if (list != null)
430 {
431 foreach (CheckTypeSource item in list)
432 {
433 bool isReferenced = true;
434 bool isObject = item.IsObject;
435 object obj = (isObject ? item.RefObject : GetTarget((string)item.RefObject));
436 if (obj != null)
437 {
439 {
440 RefObject = obj,
441 Type = obj.GetType(),
442 Id = null
443 };
445 {
446 isReferenced = false;
448 if (isObject && isReferenced)
449 {
451 }
452 }
453 }
454 }
456 return p;
457 [RequiresUnreferencedCode("calls ReadReferencedElement")]
458 void Wrapper(object _)
459 {
460 if (base.Reader.GetAttribute("id", null) != null)
461 {
463 }
464 else
465 {
466 UnknownNode(p);
467 }
468 }
469 }
470
471 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
473 {
475 TypeMapping mapping = accessor.Mapping;
476 base.Reader.MoveToContent();
480 object obj = null;
482 Member member = new Member(memberMapping);
484 {
486 };
487 member.GetSource = () => holder.Object;
489 UnknownNodeAction elseAction = base.UnknownNode;
490 WriteMemberElements(new Member[1] { member }, elementElseAction, elseAction, accessor.Any ? member : null, null);
491 obj = holder.Object;
492 if (accessor.IsSoap)
493 {
496 }
497 return obj;
498 }
499
500 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
502 {
503 bool flag = checkTypeHrefsSource != null;
504 if (base.Reader.NodeType == XmlNodeType.Element)
505 {
506 if (flag)
507 {
508 if (base.Reader.GetAttribute("root", "http://schemas.xmlsoap.org/soap/encoding/") == "0")
509 {
510 elementElseAction(null);
511 }
512 else
513 {
515 }
516 }
517 else
518 {
520 }
521 }
522 else if (anyText == null || anyText.Mapping == null || !WriteMemberText(anyText))
523 {
525 }
526 }
527
528 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
547
549 {
550 action?.Invoke(null);
551 }
552
553 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
555 {
556 base.Reader.MoveToContent();
557 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
558 {
560 base.Reader.MoveToContent();
561 }
562 }
563
565 {
566 if (collectionType.IsArray)
567 {
570 {
571 array2 = array;
572 }
573 else
574 {
575 Type elementType = collectionType.GetElementType();
577 }
578 for (int i = 0; i < collectionMember.Count; i++)
579 {
580 array2.SetValue(collectionMember[i], i);
581 }
583 }
584 else
585 {
586 if (collection == null)
587 {
589 }
591 }
592 }
593
595 {
597 {
598 {
599 foreach (object item in sourceCollection)
600 {
601 list.Add(item);
602 }
603 return;
604 }
605 }
606 MethodInfo method = targetCollectionType.GetMethod("Add");
607 if (method == null)
608 {
610 }
611 object[] array = new object[1];
612 foreach (object item2 in sourceCollection)
613 {
614 array[0] = item2;
616 }
617 }
618
619 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
647
648 private object GetMemberValue(object o, MemberInfo memberInfo)
649 {
650 if (memberInfo is PropertyInfo propertyInfo)
651 {
652 return propertyInfo.GetValue(o);
653 }
655 {
656 return fieldInfo.GetValue(o);
657 }
659 }
660
661 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
663 {
664 MemberMapping mapping = anyText.Mapping;
665 if (base.Reader.NodeType == XmlNodeType.Text || base.Reader.NodeType == XmlNodeType.CDATA || base.Reader.NodeType == XmlNodeType.Whitespace || base.Reader.NodeType == XmlNodeType.SignificantWhitespace)
666 {
668 object obj;
670 {
671 if (specialMapping.TypeDesc.Kind != TypeKind.Node)
672 {
674 }
675 obj = base.Document.CreateTextNode(base.Reader.ReadString());
676 }
677 else
678 {
679 obj = (mapping.TypeDesc.IsArrayLike ? ((!text.Mapping.TypeDesc.CollapseWhitespace) ? base.Reader.ReadString() : CollapseWhitespace(base.Reader.ReadString())) : ((text.Mapping.TypeDesc != StringTypeDesc && !(text.Mapping.TypeDesc.FormatterName == "String")) ? WritePrimitive(text.Mapping, (object state) => ((ReflectionXmlSerializationReader)state).Reader.ReadString(), this) : ReadString(null, text.Mapping.TypeDesc.CollapseWhitespace)));
680 }
681 anyText.Source(obj);
682 return true;
683 }
684 return false;
685 }
686
687 private bool IsSequence(Member[] members)
688 {
689 return false;
690 }
691
692 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
694 {
695 bool flag = checkTypeSource != null;
698 Member member = null;
699 bool flag3 = false;
700 int elementIndex = -1;
701 foreach (Member member2 in expectedMembers)
702 {
703 if (member2.Mapping.Xmlns != null || member2.Mapping.Ignore || (flag2 && (member2.Mapping.IsText || member2.Mapping.IsAttribute)))
704 {
705 continue;
706 }
707 for (int j = 0; j < member2.Mapping.Elements.Length; j++)
708 {
709 ElementAccessor elementAccessor2 = member2.Mapping.Elements[j];
710 string text = ((elementAccessor2.Form == XmlSchemaForm.Qualified) ? elementAccessor2.Namespace : string.Empty);
711 if (flag)
712 {
713 Type type;
715 {
716 TypeDesc typeDesc = nullableMapping.BaseMapping.TypeDesc;
717 type = typeDesc.Type;
718 }
719 else
720 {
721 type = elementAccessor2.Mapping.TypeDesc.Type;
722 }
723 if (type.IsAssignableFrom(checkTypeSource.Type))
724 {
725 flag3 = true;
726 }
727 }
728 else if (elementAccessor2.Name == base.Reader.LocalName && text == base.Reader.NamespaceURI)
729 {
730 flag3 = true;
731 }
732 if (flag3)
733 {
735 member = member2;
736 elementIndex = j;
737 break;
738 }
739 }
740 if (flag3)
741 {
742 break;
743 }
744 }
745 if (flag3)
746 {
747 if (flag)
748 {
749 member.Source(checkTypeSource.RefObject);
750 if (member.FixupIndex >= 0)
751 {
752 fixup.Ids[member.FixupIndex] = checkTypeSource.Id;
753 }
754 }
755 else
756 {
757 string defaultNamespace = ((elementAccessor.Form == XmlSchemaForm.Qualified) ? elementAccessor.Namespace : string.Empty);
758 bool flag4 = member.Mapping.TypeDesc.IsArrayLike && !member.Mapping.TypeDesc.IsArray;
759 WriteElement(elementAccessor, member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite, flag4 && member.Mapping.TypeDesc.IsNullable, member.Mapping.ReadOnly, defaultNamespace, member.FixupIndex, elementIndex, fixup, member);
760 }
761 }
762 else if (anyElementMember != null && anyElementMember.Mapping != null)
763 {
765 member = anyElementMember;
766 ElementAccessor[] elements = mapping.Elements;
767 foreach (ElementAccessor elementAccessor3 in elements)
768 {
769 if (elementAccessor3.Any && elementAccessor3.Name.Length == 0)
770 {
771 string defaultNamespace2 = ((elementAccessor3.Form == XmlSchemaForm.Qualified) ? elementAccessor3.Namespace : string.Empty);
772 WriteElement(elementAccessor3, mapping.CheckSpecified == SpecifiedAccessor.ReadWrite, checkForNull: false, readOnly: false, defaultNamespace2, -1, -1, fixup, member);
773 break;
774 }
775 }
776 }
777 else
778 {
779 member = null;
781 }
782 }
783
784 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
785 private object WriteElement(ElementAccessor element, bool checkSpecified, bool checkForNull, bool readOnly, string defaultNamespace, int fixupIndex = -1, int elementIndex = -1, Fixup fixup = null, Member member = null)
786 {
787 object obj = null;
789 {
790 obj = WriteArray(arrayMapping, readOnly, element.IsNullable, defaultNamespace, fixupIndex, fixup, member);
791 }
792 else if (element.Mapping is NullableMapping nullableMapping)
793 {
794 obj = WriteNullableMethod(nullableMapping, checkType: true, defaultNamespace);
795 }
796 else if (!element.Mapping.IsSoap && element.Mapping is PrimitiveMapping)
797 {
798 if (element.IsNullable && ReadNull())
799 {
801 }
802 else if (element.Default != null && element.Default != DBNull.Value && element.Mapping.TypeDesc.IsValueType && base.Reader.IsEmptyElement)
803 {
804 base.Reader.Skip();
805 }
806 else if (element.Mapping.TypeDesc.Type == typeof(TimeSpan) && base.Reader.IsEmptyElement)
807 {
808 base.Reader.Skip();
809 obj = default(TimeSpan);
810 }
811 else if (element.Mapping.TypeDesc.Type == typeof(DateTimeOffset) && base.Reader.IsEmptyElement)
812 {
813 base.Reader.Skip();
814 obj = default(DateTimeOffset);
815 }
816 else if (element.Mapping.TypeDesc == QnameTypeDesc)
817 {
819 }
820 else if (element.Mapping.TypeDesc.FormatterName == "ByteArrayBase64")
821 {
822 obj = ToByteArrayBase64(isNull: false);
823 }
824 else if (element.Mapping.TypeDesc.FormatterName == "ByteArrayHex")
825 {
826 obj = ToByteArrayHex(isNull: false);
827 }
828 else
829 {
830 Func<object, string> readFunc = (object state) => ((XmlReader)state).ReadElementContentAsString();
831 obj = WritePrimitive(element.Mapping, readFunc, base.Reader);
832 }
833 }
834 else if (element.Mapping is StructMapping || (element.Mapping.IsSoap && element.Mapping is PrimitiveMapping))
835 {
836 TypeMapping mapping = element.Mapping;
837 if (mapping.IsSoap)
838 {
839 object obj2 = ((fixupIndex >= 0) ? ReadReferencingElement(mapping.TypeName, mapping.Namespace, out fixup.Ids[fixupIndex]) : ReadReferencedElement(mapping.TypeName, mapping.Namespace));
840 if (!mapping.TypeDesc.IsValueType || obj2 != null)
841 {
842 obj = obj2;
844 }
845 if (fixupIndex >= 0)
846 {
847 if (member == null)
848 {
850 }
851 member.Source(obj);
852 return obj;
853 }
854 }
855 else if (checkForNull && member.Source == null && member.ArraySource == null)
856 {
857 base.Reader.Skip();
858 }
859 else
860 {
861 obj = WriteStructMethod((StructMapping)mapping, mapping.TypeDesc.IsNullable && element.IsNullable, checkType: true, defaultNamespace);
862 }
863 }
864 else
865 {
867 {
869 }
870 switch (specialMapping.TypeDesc.Kind)
871 {
872 case TypeKind.Node:
873 obj = ((!(specialMapping.TypeDesc.FullName == typeof(XmlDocument).FullName)) ? ReadXmlNode(!element.Any) : ReadXmlDocument(!element.Any));
874 break;
875 case TypeKind.Serializable:
876 {
878 bool flag = true;
879 if (serializableMapping.DerivedMappings != null)
880 {
882 if (!(xsiType == null) && !QNameEqual(xsiType, serializableMapping.XsiType.Name, serializableMapping.XsiType.Namespace, defaultNamespace))
883 {
884 flag = false;
885 }
886 }
887 if (flag)
888 {
891 }
892 if (serializableMapping.DerivedMappings != null)
893 {
894 throw new NotImplementedException("sm.DerivedMappings != null");
895 }
896 break;
897 }
898 default:
900 }
901 }
902 member?.ChoiceSource?.Invoke(element.Name);
903 if (member != null && member.ArraySource != null)
904 {
905 member?.ArraySource(obj);
906 }
907 else
908 {
909 member?.Source?.Invoke(obj);
910 member?.CheckSpecifiedSource?.Invoke(true);
911 }
912 return obj;
913 }
914
915 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
917 {
919 if (structMapping != null)
920 {
921 return WriteStruct;
922 }
924 if (enumMapping != null)
925 {
926 return () => WriteEnumMethodSoap(enumMapping);
927 }
929 if (nullableMapping != null)
930 {
931 return Wrapper;
932 }
934 [RequiresUnreferencedCode("calls WriteNullableMethod")]
935 object Wrapper()
936 {
937 return WriteNullableMethod(nullableMapping, checkType: false, null);
938 }
939 [RequiresUnreferencedCode("calls WriteStructMethod")]
940 object WriteStruct()
941 {
942 return WriteStructMethod(structMapping, mapping.TypeDesc.IsNullable, checkType: true, null);
943 }
944 }
945
946 private static void NoopAction(object o)
947 {
948 }
949
950 private object DummyReadArrayMethod()
951 {
952 UnknownNode(null);
953 return null;
954 }
955
957 {
959 {
960 return fieldInfo.FieldType;
961 }
962 if (memberInfo is PropertyInfo propertyInfo)
963 {
964 return propertyInfo.PropertyType;
965 }
967 }
968
969 private static bool IsWildcard(SpecialMapping mapping)
970 {
972 {
973 return serializableMapping.IsAny;
974 }
975 return mapping.TypeDesc.CanBeElementValue;
976 }
977
978 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
979 private object WriteArray(ArrayMapping arrayMapping, bool readOnly, bool isNullable, string defaultNamespace, int fixupIndex = -1, Fixup fixup = null, Member member = null)
980 {
981 object collection = null;
982 if (arrayMapping.IsSoap)
983 {
984 object obj = ((fixupIndex < 0) ? ReadReferencedElement(arrayMapping.TypeName, arrayMapping.Namespace) : ReadReferencingElement(arrayMapping.TypeName, arrayMapping.Namespace, out fixup.Ids[fixupIndex]));
985 TypeDesc typeDesc = arrayMapping.TypeDesc;
986 if (obj != null)
987 {
988 if (typeDesc.IsEnumerable || typeDesc.IsCollection)
989 {
990 WriteAddCollectionFixup(member.GetSource, member.Source, obj, typeDesc, readOnly);
992 }
993 else
994 {
995 if (member == null)
996 {
998 }
999 member.Source(obj);
1000 }
1001 }
1002 collection = obj;
1003 }
1004 else if (!ReadNull())
1005 {
1007 {
1008 Elements = arrayMapping.Elements,
1009 TypeDesc = arrayMapping.TypeDesc,
1011 };
1012 Type type = memberMapping.TypeDesc.Type;
1014 if (memberMapping.ChoiceIdentifier != null)
1015 {
1016 throw new NotImplementedException("memberMapping.ChoiceIdentifier != null");
1017 }
1021 {
1022 arrayMember.Collection.Add(item);
1023 };
1024 if ((readOnly && collection == null) || base.Reader.IsEmptyElement)
1025 {
1026 base.Reader.Skip();
1027 }
1028 else
1029 {
1030 base.Reader.ReadStartElement();
1031 base.Reader.MoveToContent();
1032 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
1033 {
1034 WriteMemberElements(new Member[1] { arrayMember }, base.UnknownNode, base.UnknownNode, null, null);
1035 base.Reader.MoveToContent();
1036 }
1038 }
1040 }
1041 return collection;
1042 }
1043
1044 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1046 {
1048 {
1050 }
1051 if (mapping.TypeDesc == StringTypeDesc)
1052 {
1053 return readFunc(funcState);
1054 }
1055 if (mapping.TypeDesc.FormatterName == "String")
1056 {
1057 if (mapping.TypeDesc.CollapseWhitespace)
1058 {
1060 }
1061 return readFunc(funcState);
1062 }
1063 if (!mapping.TypeDesc.HasCustomFormatter)
1064 {
1065 string s = readFunc(funcState);
1066 return mapping.TypeDesc.FormatterName switch
1067 {
1068 "Boolean" => XmlConvert.ToBoolean(s),
1069 "Int32" => XmlConvert.ToInt32(s),
1070 "Int16" => XmlConvert.ToInt16(s),
1071 "Int64" => XmlConvert.ToInt64(s),
1072 "Single" => XmlConvert.ToSingle(s),
1073 "Double" => XmlConvert.ToDouble(s),
1074 "Decimal" => XmlConvert.ToDecimal(s),
1075 "Byte" => XmlConvert.ToByte(s),
1076 "SByte" => XmlConvert.ToSByte(s),
1077 "UInt16" => XmlConvert.ToUInt16(s),
1078 "UInt32" => XmlConvert.ToUInt32(s),
1079 "UInt64" => XmlConvert.ToUInt64(s),
1080 "Guid" => XmlConvert.ToGuid(s),
1081 "Char" => XmlConvert.ToChar(s),
1082 "TimeSpan" => XmlConvert.ToTimeSpan(s),
1083 "DateTimeOffset" => XmlConvert.ToDateTimeOffset(s),
1084 _ => throw new InvalidOperationException(System.SR.Format(System.SR.XmlInternalErrorDetails, "unknown FormatterName: " + mapping.TypeDesc.FormatterName)),
1085 };
1086 }
1087 string name = "To" + mapping.TypeDesc.FormatterName;
1088 MethodInfo method = typeof(XmlSerializationReader).GetMethod(name, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, new Type[1] { typeof(string) });
1089 if (method == null)
1090 {
1091 throw new InvalidOperationException(System.SR.Format(System.SR.XmlInternalErrorDetails, "unknown FormatterName: " + mapping.TypeDesc.FormatterName));
1092 }
1093 return method.Invoke(this, new object[1] { readFunc(funcState) });
1094 }
1095
1096 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1097 private object WriteStructMethod(StructMapping mapping, bool isNullable, bool checkType, string defaultNamespace)
1098 {
1099 if (mapping.IsSoap)
1100 {
1102 }
1103 return WriteLiteralStructMethod(mapping, isNullable, checkType, defaultNamespace);
1104 }
1105
1106 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1107 private object WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string defaultNamespace)
1108 {
1109 object result = Activator.CreateInstance(nullableMapping.TypeDesc.Type);
1110 if (!ReadNull())
1111 {
1114 elementAccessor.Any = false;
1115 elementAccessor.IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable;
1116 result = WriteElement(elementAccessor, checkSpecified: false, checkForNull: false, readOnly: false, defaultNamespace);
1117 }
1118 return result;
1119 }
1120
1126
1128 {
1129 string source = base.Reader.ReadElementString();
1131 }
1132
1134 {
1135 if (mapping.IsFlags)
1136 {
1137 Hashtable h = WriteHashtable(mapping, mapping.TypeDesc.Name);
1138 return Enum.ToObject(mapping.TypeDesc.Type, XmlSerializationReader.ToEnum(source, h, mapping.TypeDesc.Name));
1139 }
1140 ConstantMapping[] constants = mapping.Constants;
1142 {
1143 if (string.Equals(constantMapping.XmlName, source))
1144 {
1145 return Enum.Parse(mapping.TypeDesc.Type, constantMapping.Name);
1146 }
1147 }
1148 throw CreateUnknownConstantException(source, mapping.TypeDesc.Type);
1149 }
1150
1152 {
1153 Hashtable hashtable = new Hashtable();
1154 ConstantMapping[] constants = mapping.Constants;
1155 for (int i = 0; i < constants.Length; i++)
1156 {
1157 hashtable.Add(constants[i].XmlName, constants[i].Value);
1158 }
1159 return hashtable;
1160 }
1161
1163 {
1164 if (type.IsArray)
1165 {
1166 return Activator.CreateInstance(type, 32);
1167 }
1169 if (defaultConstructor != null)
1170 {
1171 return defaultConstructor.Invoke(Array.Empty<object>());
1172 }
1174 }
1175
1177 {
1178 if (!type.IsValueType)
1179 {
1180 return type.GetConstructor(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);
1181 }
1182 return null;
1183 }
1184
1185 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1187 {
1188 if (structMapping.TypeDesc.IsRoot)
1189 {
1190 return null;
1191 }
1192 Member[] array = null;
1193 if (structMapping.TypeDesc.IsAbstract)
1194 {
1195 throw CreateAbstractTypeException(structMapping.TypeName, structMapping.Namespace);
1196 }
1197 object o = ReflectionCreateObject(structMapping.TypeDesc.Type);
1199 array = new Member[settableMembers.Length];
1200 for (int i = 0; i < settableMembers.Length; i++)
1201 {
1203 Member member = new Member(mapping);
1205 if (typeDesc.IsCollection || typeDesc.IsEnumerable)
1206 {
1207 member.Source = Wrapper;
1208 }
1209 else if (!member.Mapping.ReadOnly)
1210 {
1212 member.Source = delegate(object value)
1213 {
1215 };
1216 }
1217 else
1218 {
1220 }
1221 array[i] = member;
1222 [RequiresUnreferencedCode("Calls WriteAddCollectionFixup")]
1223 void Wrapper(object value)
1224 {
1226 }
1227 }
1230 {
1231 UnknownNode(o);
1232 };
1234 base.Reader.MoveToElement();
1235 if (base.Reader.IsEmptyElement)
1236 {
1237 base.Reader.Skip();
1238 return o;
1239 }
1240 base.Reader.ReadStartElement();
1241 base.Reader.MoveToContent();
1242 while (base.Reader.NodeType != XmlNodeType.EndElement && base.Reader.NodeType != 0)
1243 {
1244 WriteMemberElements(array, base.UnknownNode, base.UnknownNode, null, null, fixup);
1245 base.Reader.MoveToContent();
1246 }
1248 return o;
1249 }
1250
1252 {
1253 int num = 0;
1254 foreach (Member member in members)
1255 {
1256 if (member.Mapping.Elements.Length != 0)
1257 {
1260 {
1261 member.MultiRef = true;
1262 member.FixupIndex = num++;
1263 }
1264 }
1265 }
1266 Fixup fixup;
1267 if (num > 0)
1268 {
1270 AddFixup(fixup);
1271 }
1272 else
1273 {
1274 fixup = null;
1275 }
1276 return fixup;
1277 }
1278
1280 {
1281 return delegate(object fixupObject)
1282 {
1284 string[] ids = fixup.Ids;
1285 Member[] array = members;
1286 foreach (Member member in array)
1287 {
1288 if (member.MultiRef)
1289 {
1290 int fixupIndex = member.FixupIndex;
1291 if (ids[fixupIndex] != null)
1292 {
1293 object target = GetTarget(ids[fixupIndex]);
1294 member.Source(target);
1295 }
1296 }
1297 }
1298 };
1299 }
1300
1301 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1314
1315 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1317 {
1318 object obj = getSource();
1319 if (obj == null)
1320 {
1321 if (readOnly)
1322 {
1324 }
1326 setSource(obj);
1327 }
1329 AddFixup(fixup);
1330 return obj;
1331 }
1332
1333 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1335 {
1336 return Wrapper;
1337 [RequiresUnreferencedCode("Calls AddObjectsIntoTargetCollection")]
1338 void Wrapper(object collection, object collectionItems)
1339 {
1340 if (collectionItems != null && collection != null)
1341 {
1343 if (!(collectionItems is IEnumerable enumerable))
1344 {
1346 }
1347 foreach (object item in enumerable)
1348 {
1349 list.Add(item);
1350 }
1352 }
1353 }
1354 }
1355
1356 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1357 private object WriteLiteralStructMethod(StructMapping structMapping, bool isNullable, bool checkType, string defaultNamespace)
1358 {
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);
1417 Member anyAttribute = null;
1418 Member anyElement = null;
1419 Member anyText = null;
1420 bool flag2 = structMapping.HasExplicitSequence();
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 {
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 {
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 }
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 {
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 }
1594
1595 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1596 private bool WriteEnumAndArrayTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace)
1597 {
1598 foreach (object typeMapping in _mapping.Scope.TypeMappings)
1599 {
1601 {
1602 if (QNameEqual(xsiType, enumMapping.TypeName, enumMapping.Namespace, defaultNamespace))
1603 {
1604 base.Reader.ReadStartElement();
1606 {
1608 return reflectionXmlSerializationReader.CollapseWhitespace(reflectionXmlSerializationReader.Reader.ReadString());
1609 };
1612 return true;
1613 }
1614 }
1615 else if (typeMapping is ArrayMapping arrayMapping && QNameEqual(xsiType, arrayMapping.TypeName, arrayMapping.Namespace, defaultNamespace))
1616 {
1617 o = WriteArray(arrayMapping, readOnly: false, isNullable: false, defaultNamespace);
1618 return true;
1619 }
1620 }
1621 o = null;
1622 return false;
1623 }
1624
1625 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1626 private bool WriteDerivedTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace, bool checkType, bool isNullable)
1627 {
1628 for (StructMapping structMapping = mapping.DerivedMappings; structMapping != null; structMapping = structMapping.NextDerivedMapping)
1629 {
1630 if (QNameEqual(xsiType, structMapping.TypeName, structMapping.Namespace, defaultNamespace))
1631 {
1632 o = WriteStructMethod(structMapping, isNullable, checkType, defaultNamespace);
1633 return true;
1634 }
1635 if (WriteDerivedTypes(out o, structMapping, xsiType, defaultNamespace, checkType, isNullable))
1636 {
1637 return true;
1638 }
1639 }
1640 o = null;
1641 return false;
1642 }
1643
1644 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1646 {
1647 Member member = null;
1649 foreach (Member member2 in members)
1650 {
1651 if (member2.Mapping.Xmlns != null)
1652 {
1653 member = member2;
1654 break;
1655 }
1656 }
1657 while (base.Reader.MoveToNextAttribute())
1658 {
1659 bool flag = false;
1660 foreach (Member member3 in members)
1661 {
1662 if (member3.Mapping.Xmlns != null || member3.Mapping.Ignore)
1663 {
1664 continue;
1665 }
1666 AttributeAccessor attribute = member3.Mapping.Attribute;
1667 if (attribute != null && !attribute.Any)
1668 {
1670 flag = ((!attribute.IsSpecialXmlNamespace) ? XmlNodeEqual(base.Reader, attribute.Name, (attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : string.Empty) : XmlNodeEqual(base.Reader, attribute.Name, "http://www.w3.org/XML/1998/namespace"));
1671 if (flag)
1672 {
1674 flag = true;
1675 break;
1676 }
1677 }
1678 }
1679 if (flag)
1680 {
1681 continue;
1682 }
1683 bool flag2 = false;
1684 if (member != null)
1685 {
1686 if (IsXmlnsAttribute(base.Reader.Name))
1687 {
1688 member.XmlnsSource((base.Reader.Name.Length == 5) ? string.Empty : base.Reader.LocalName, base.Reader.Value);
1689 }
1690 else
1691 {
1692 flag2 = true;
1693 }
1694 }
1695 else if (!IsXmlnsAttribute(base.Reader.Name))
1696 {
1697 flag2 = true;
1698 }
1699 if (flag2)
1700 {
1701 if (anyAttribute != null)
1702 {
1703 XmlAttribute attr = base.Document.ReadNode(base.Reader) as XmlAttribute;
1706 }
1707 else
1708 {
1709 elseCall(o);
1710 }
1711 }
1712 }
1713 }
1714
1715 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1716 private void WriteAttribute(Member member, object attr = null)
1717 {
1719 object obj = null;
1721 {
1722 if (specialMapping.TypeDesc.Kind != TypeKind.Attribute)
1723 {
1724 if (specialMapping.TypeDesc.CanBeAttributeValue)
1725 {
1726 throw new NotImplementedException("special.TypeDesc.CanBeAttributeValue");
1727 }
1729 }
1730 obj = attr;
1731 }
1732 else if (attribute.IsList)
1733 {
1734 string value = base.Reader.Value;
1735 string[] array = value.Split((char[]?)null);
1737 int i;
1738 for (i = 0; i < array.Length; i++)
1739 {
1740 array2.SetValue(WritePrimitive(attribute.Mapping, (object state) => ((string[])state)[i], array), i);
1741 }
1742 obj = array2;
1743 }
1744 else
1745 {
1746 obj = WritePrimitive(attribute.Mapping, (object state) => ((XmlReader)state).Value, base.Reader);
1747 }
1748 member.Source(obj);
1749 if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
1750 {
1751 member.CheckSpecifiedSource?.Invoke(null);
1752 }
1753 }
1754
1755 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1774
1775 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly")]
1777 {
1779 int num = array?.Length ?? 0;
1780 Array array2 = Array.CreateInstance(memberType.GetElementType(), num + 1);
1781 if (array != null)
1782 {
1783 Array.Copy(array, array2, num);
1784 }
1785 array2.SetValue(item, num);
1788 }
1789
1790 private bool XmlNodeEqual(XmlReader source, string name, string ns)
1791 {
1792 if (source.LocalName == name)
1793 {
1794 return string.Equals(source.NamespaceURI, ns);
1795 }
1796 return false;
1797 }
1798
1799 private bool QNameEqual(XmlQualifiedName xsiType, string name, string ns, string defaultNamespace)
1800 {
1801 if (xsiType.Name == name)
1802 {
1803 return string.Equals(xsiType.Namespace, defaultNamespace);
1804 }
1805 return false;
1806 }
1807
1808 private void CreateUnknownNodeException(object o)
1809 {
1811 }
1812}
static ? object CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture)
Definition Activator.cs:17
int Length
Definition Array.cs:430
static unsafe Array CreateInstance(Type elementType, int length)
Definition Array.cs:473
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
void Add(TKey key, TValue value)
virtual void Add(object key, object? value)
Definition Hashtable.cs:676
static readonly DBNull Value
Definition DBNull.cs:8
static object Parse(Type enumType, string value)
Definition Enum.cs:368
static object ToObject(Type enumType, object value)
Definition Enum.cs:874
static string XmlInternalError
Definition SR.cs:1812
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlSequenceHierarchy
Definition SR.cs:1800
static string XmlInternalErrorDetails
Definition SR.cs:1814
Definition SR.cs:7
Type? GetElementType()
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
static readonly Type[] EmptyTypes
Definition Type.cs:19
static MemberInfo GetEffectiveSetInfo(Type declaringType, string memberName)
delegate void SetMemberValueDelegate(object o, object val)
ReflectionXmlSerializationReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, string encodingStyle)
static readonly ConcurrentDictionary<(Type, string), ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate > s_setMemberValueDelegateCache
object WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string defaultNamespace)
void WriteMemberElementsCheckType(List< CheckTypeSource > checkTypeHrefsSource)
object WriteElement(ElementAccessor element, bool checkSpecified, bool checkForNull, bool readOnly, string defaultNamespace, int fixupIndex=-1, int elementIndex=-1, Fixup fixup=null, Member member=null)
void WriteMemberElementsIf(Member[] expectedMembers, Member anyElementMember, UnknownNodeAction elementElseAction, Fixup fixup=null, CheckTypeSource checkTypeSource=null)
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)
XmlSerializationReadCallback CreateXmlSerializationReadCallback(TypeMapping mapping)
object ReflectionCreateObject([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors|DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type type)
object WritePrimitive(TypeMapping mapping, Func< object, string > readFunc, object funcState)
bool WriteDerivedTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace, bool checkType, bool isNullable)
object WriteEnumMethod(EnumMapping mapping, Func< object, string > readFunc, object funcState)
object GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping)
object WriteStructMethod(StructMapping mapping, bool isNullable, bool checkType, string defaultNamespace)
bool QNameEqual(XmlQualifiedName xsiType, string name, string ns, string defaultNamespace)
void AddItemInArrayMember(object o, MemberInfo memberInfo, Type memberType, object item)
void WriteAddCollectionFixup(object o, Member member, object memberValue)
static void AddObjectsIntoTargetCollection(object targetCollection, List< object > sourceCollection, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type targetCollectionType)
XmlSerializationFixupCallback CreateWriteFixupMethod(Member[] members)
void WriteAttributes(Member[] members, Member anyAttribute, UnknownNodeAction elseCall, ref object o)
bool GenerateLiteralMembersElementInternal(MemberMapping[] mappings, bool hasWrapperElement, object[] p)
XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCallback(Type collectionType)
object WriteLiteralStructMethod(StructMapping structMapping, bool isNullable, bool checkType, string defaultNamespace)
object WriteAddCollectionFixup(Func< object > getSource, Action< object > setSource, object memberValue, TypeDesc typeDesc, bool readOnly)
void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo)
bool WriteEnumAndArrayTypes(out object o, StructMapping mapping, XmlQualifiedName xsiType, string defaultNamespace)
object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping)
object WriteArray(ArrayMapping arrayMapping, bool readOnly, bool isNullable, string defaultNamespace, int fixupIndex=-1, Fixup fixup=null, Member member=null)
void WriteMembers(ref object o, Member[] members, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member anyElement, Member anyText)
void WriteMemberElements(Member[] expectedMembers, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member anyElement, Member anyText, Fixup fixup=null, List< CheckTypeSource > checkTypeHrefsSource=null)
ConstructorInfo GetDefaultConstructor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type)
static MemberMapping[] GetSettableMembers(StructMapping structMapping)
Definition TypeScope.cs:628
TypeDesc GetTypeDesc(string name, string ns)
Definition TypeScope.cs:224
void Init(XmlReader r, XmlDeserializationEvents events, string encodingStyle, TempAssembly tempAssembly)
static long ToEnum(string value, Hashtable h, string typeName)
void AddReadCallback(string name, string ns, Type type, XmlSerializationReadCallback read)
Exception CreateUnknownTypeException(XmlQualifiedName type)
Exception CreateUnknownConstantException(string? value, Type enumType)
object? ReadReferencingElement(out string? fixupReference)
IXmlSerializable ReadSerializable(IXmlSerializable serializable)
Exception CreateAbstractTypeException(string name, string? ns)
static bool ToBoolean(string s)
static DateTimeOffset ToDateTimeOffset(string s)
static uint ToUInt32(string s)
static int ToInt32(string s)
static short ToInt16(string s)
static float ToSingle(string s)
static TimeSpan ToTimeSpan(string s)
static char ToChar(string s)
static double ToDouble(string s)
static sbyte ToSByte(string s)
static Guid ToGuid(string s)
static decimal ToDecimal(string s)
static ulong ToUInt64(string s)
static ushort ToUInt16(string s)
static byte ToByte(string s)
static long ToInt64(string s)
delegate void XmlSerializationCollectionFixupCallback(object? collection, object? collectionItems)
delegate void XmlSerializationFixupCallback(object fixup)
delegate void UnknownNodeAction(object o)
delegate? object XmlSerializationReadCallback()