Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlSerializationReaderCodeGen.cs
Go to the documentation of this file.
5using System.IO;
9
11
13{
14 private sealed class CreateCollectionInfo
15 {
16 private readonly string _name;
17
18 private readonly TypeDesc _td;
19
20 internal string Name => _name;
21
22 internal TypeDesc TypeDesc => _td;
23
24 internal CreateCollectionInfo(string name, TypeDesc td)
25 {
26 _name = name;
27 _td = td;
28 }
29 }
30
31 private sealed class Member
32 {
33 private readonly string _source;
34
35 private readonly string _arrayName;
36
37 private readonly string _arraySource;
38
39 private readonly string _choiceArrayName;
40
41 private readonly string _choiceSource;
42
43 private readonly string _choiceArraySource;
44
45 private readonly MemberMapping _mapping;
46
47 private readonly bool _isArray;
48
49 private readonly bool _isList;
50
51 private bool _isNullable;
52
53 private bool _multiRef;
54
55 private int _fixupIndex = -1;
56
57 private string _paramsReadSource;
58
59 private string _checkSpecifiedSource;
60
62
63 internal string Source => _source;
64
65 internal string ArrayName => _arrayName;
66
67 internal string ArraySource => _arraySource;
68
69 internal bool IsList => _isList;
70
71 internal bool IsArrayLike
72 {
73 get
74 {
75 if (!_isArray)
76 {
77 return _isList;
78 }
79 return true;
80 }
81 }
82
83 internal bool IsNullable
84 {
85 get
86 {
87 return _isNullable;
88 }
89 set
90 {
92 }
93 }
94
95 internal bool MultiRef
96 {
97 get
98 {
99 return _multiRef;
100 }
101 set
102 {
104 }
105 }
106
107 internal int FixupIndex
108 {
109 get
110 {
111 return _fixupIndex;
112 }
113 set
114 {
116 }
117 }
118
119 internal string ParamsReadSource
120 {
121 get
122 {
123 return _paramsReadSource;
124 }
125 set
126 {
128 }
129 }
130
131 internal string CheckSpecifiedSource
132 {
133 get
134 {
136 }
137 set
138 {
140 }
141 }
142
143 internal string ChoiceSource => _choiceSource;
144
146
148
153
158
163
168
173
175 {
176 _source = source;
177 _arrayName = arrayName + "_" + i.ToString(CultureInfo.InvariantCulture);
178 _choiceArrayName = "choice_" + _arrayName;
180 if (mapping.TypeDesc.IsArrayLike)
181 {
182 if (arraySource != null)
183 {
185 }
186 else
187 {
188 _arraySource = outerClass.GetArraySource(mapping.TypeDesc, _arrayName, multiRef);
189 }
190 _isArray = mapping.TypeDesc.IsArray;
191 _isList = !_isArray;
192 if (mapping.ChoiceIdentifier != null)
193 {
196 string text = "c" + choiceArrayName;
197 bool useReflection = mapping.ChoiceIdentifier.Mapping.TypeDesc.UseReflection;
198 string cSharpName = mapping.ChoiceIdentifier.Mapping.TypeDesc.CSharpName;
199 string text2 = (useReflection ? "" : ("(" + cSharpName + "[])"));
200 string text3 = choiceArrayName + " = " + text2 + "EnsureArrayIndex(" + choiceArrayName + ", " + text + ", " + outerClass.RaCodeGen.GetStringForTypeof(cSharpName, useReflection) + ");";
201 _choiceArraySource = text3 + outerClass.RaCodeGen.GetStringForArrayMember(choiceArrayName, text + "++", mapping.ChoiceIdentifier.Mapping.TypeDesc);
202 }
203 else
204 {
206 }
207 }
208 else
209 {
210 _arraySource = ((arraySource == null) ? source : arraySource);
212 }
214 }
215 }
216
217 private readonly Hashtable _idNames = new Hashtable();
218
220
221 private readonly Hashtable _createMethods = new Hashtable();
222
224
225 private int _nextIdNumber;
226
227 internal Hashtable Enums
228 {
229 get
230 {
231 if (_enums == null)
232 {
233 _enums = new Hashtable();
234 }
235 return _enums;
236 }
237 }
238
239 [RequiresUnreferencedCode("creates XmlSerializationCodeGen")]
241 : base(writer, scopes, access, className)
242 {
243 }
244
245 [RequiresUnreferencedCode("calls WriteReflectionInit")]
246 internal void GenerateBegin()
247 {
248 base.Writer.Write(base.Access);
249 base.Writer.Write(" class ");
250 base.Writer.Write(base.ClassName);
251 base.Writer.Write(" : ");
253 base.Writer.WriteLine(" {");
254 base.Writer.Indent++;
255 TypeScope[] scopes = base.Scopes;
256 foreach (TypeScope typeScope in scopes)
257 {
258 foreach (TypeMapping typeMapping3 in typeScope.TypeMappings)
259 {
261 {
262 base.MethodNames.Add(typeMapping3, NextMethodName(typeMapping3.TypeDesc.Name));
263 }
264 }
265 base.RaCodeGen.WriteReflectionInit(typeScope);
266 }
267 TypeScope[] scopes2 = base.Scopes;
268 foreach (TypeScope typeScope2 in scopes2)
269 {
270 foreach (TypeMapping typeMapping4 in typeScope2.TypeMappings)
271 {
272 if (typeMapping4.IsSoap)
273 {
275 {
277 }
278 else if (typeMapping4 is EnumMapping)
279 {
281 }
283 {
285 }
286 }
287 }
288 }
289 }
290
291 [RequiresUnreferencedCode("calls WriteStructMethod")]
292 internal override void GenerateMethod(TypeMapping mapping)
293 {
294 if (!base.GeneratedMethods.Contains(mapping))
295 {
296 base.GeneratedMethods[mapping] = mapping;
298 {
300 }
301 else if (mapping is EnumMapping)
302 {
304 }
305 else if (mapping is NullableMapping)
306 {
308 }
309 }
310 }
311
312 [RequiresUnreferencedCode("calls GenerateReferencedMethods")]
313 internal void GenerateEnd(string[] methods, XmlMapping[] xmlMappings, Type[] types)
314 {
318 {
320 }
321 base.Writer.WriteLine();
322 foreach (string value2 in _idNames.Values)
323 {
324 base.Writer.Write("string ");
325 base.Writer.Write(value2);
326 base.Writer.WriteLine(";");
327 }
328 base.Writer.WriteLine();
329 base.Writer.WriteLine("protected override void InitIDs() {");
330 base.Writer.Indent++;
331 foreach (string key in _idNames.Keys)
332 {
333 string s2 = (string)_idNames[key];
334 base.Writer.Write(s2);
335 base.Writer.Write(" = Reader.NameTable.Add(");
337 base.Writer.WriteLine(");");
338 }
339 base.Writer.Indent--;
340 base.Writer.WriteLine("}");
341 base.Writer.Indent--;
342 base.Writer.WriteLine("}");
343 }
344
346 {
347 if (!xmlMapping.IsReadable)
348 {
349 return null;
350 }
351 if (!xmlMapping.GenerateSerializer)
352 {
353 throw new ArgumentException(System.SR.XmlInternalError, "xmlMapping");
354 }
356 {
358 }
360 {
362 }
363 throw new ArgumentException(System.SR.XmlInternalError, "xmlMapping");
364 }
365
366 private void WriteIsStartTag(string name, string ns)
367 {
368 base.Writer.Write("if (Reader.IsStartElement(");
369 WriteID(name);
370 base.Writer.Write(", ");
371 WriteID(ns);
372 base.Writer.WriteLine(")) {");
373 base.Writer.Indent++;
374 }
375
376 private void WriteUnknownNode(string func, string node, ElementAccessor e, bool anyIfs)
377 {
378 if (anyIfs)
379 {
380 base.Writer.WriteLine("else {");
381 base.Writer.Indent++;
382 }
383 base.Writer.Write(func);
384 base.Writer.Write("(");
385 base.Writer.Write(node);
386 if (e != null)
387 {
388 base.Writer.Write(", ");
389 string text = ((e.Form == XmlSchemaForm.Qualified) ? e.Namespace : "");
390 text += ":";
391 text += e.Name;
393 }
394 base.Writer.WriteLine(");");
395 if (anyIfs)
396 {
397 base.Writer.Indent--;
398 base.Writer.WriteLine("}");
399 }
400 }
401
403 {
404 base.Writer.WriteLine();
405 base.Writer.WriteLine("protected override void InitCallbacks() {");
406 base.Writer.Indent++;
407 string text = NextMethodName("Array");
408 bool flag = false;
409 TypeScope[] scopes = base.Scopes;
410 foreach (TypeScope typeScope in scopes)
411 {
412 foreach (TypeMapping typeMapping in typeScope.TypeMappings)
413 {
415 {
416 string s;
418 {
419 s = text;
420 flag = true;
421 }
422 else
423 {
424 s = (string)base.MethodNames[typeMapping];
425 }
426 base.Writer.Write("AddReadCallback(");
427 WriteID(typeMapping.TypeName);
428 base.Writer.Write(", ");
429 WriteID(typeMapping.Namespace);
430 base.Writer.Write(", ");
431 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(typeMapping.TypeDesc.CSharpName, typeMapping.TypeDesc.UseReflection));
432 base.Writer.Write(", new ");
434 base.Writer.Write("(this.");
435 base.Writer.Write(s);
436 base.Writer.WriteLine("));");
437 }
438 }
439 }
440 base.Writer.Indent--;
441 base.Writer.WriteLine("}");
442 if (flag)
443 {
444 base.Writer.WriteLine();
445 base.Writer.Write("object ");
446 base.Writer.Write(text);
447 base.Writer.WriteLine("() {");
448 base.Writer.Indent++;
449 base.Writer.WriteLine("// dummy array method");
450 base.Writer.WriteLine("UnknownNode(null);");
451 base.Writer.WriteLine("return null;");
452 base.Writer.Indent--;
453 base.Writer.WriteLine("}");
454 }
455 }
456
465
467 {
468 string result = null;
469 if (member.ChoiceIdentifier != null)
470 {
471 for (int i = 0; i < mappings.Length; i++)
472 {
473 if (mappings[i].Name == member.ChoiceIdentifier.MemberName)
474 {
475 result = $"p[{i}]";
476 break;
477 }
478 }
479 }
480 return result;
481 }
482
484 {
485 if (mapping.ChoiceIdentifier == null)
486 {
487 return "";
488 }
489 CodeIdentifier.CheckValidIdentifier(mapping.ChoiceIdentifier.MemberName);
490 return base.RaCodeGen.GetStringForMember(parent, mapping.ChoiceIdentifier.MemberName, parentTypeDesc);
491 }
492
494 {
496 MemberMapping[] members = ((MembersMapping)accessor.Mapping).Members;
497 bool hasWrapperElement = ((MembersMapping)accessor.Mapping).HasWrapperElement;
498 string text = NextMethodName(accessor.Name);
499 base.Writer.WriteLine();
500 base.Writer.Write("public object[] ");
501 base.Writer.Write(text);
502 base.Writer.WriteLine("() {");
503 base.Writer.Indent++;
504 base.Writer.WriteLine("Reader.MoveToContent();");
505 base.Writer.Write("object[] p = new object[");
506 base.Writer.Write(members.Length.ToString(CultureInfo.InvariantCulture));
507 base.Writer.WriteLine("];");
510 {
512 base.Writer.Indent++;
513 WriteIsStartTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
514 }
515 Member anyText = null;
516 Member anyElement = null;
517 Member anyAttribute = null;
521 for (int i = 0; i < members.Length; i++)
522 {
524 string text2 = $"p[{i}]";
525 string arraySource = text2;
526 if (memberMapping.Xmlns != null)
527 {
528 arraySource = $"(({memberMapping.TypeDesc.CSharpName}){text2})";
529 }
531 Member member = new Member(this, text2, arraySource, "a", i, memberMapping, choiceIdentifierSource);
532 Member member2 = new Member(this, text2, null, "a", i, memberMapping, choiceIdentifierSource);
533 if (!memberMapping.IsSequence)
534 {
535 member.ParamsReadSource = $"paramsRead[{i}]";
536 }
537 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
538 {
539 string text3 = memberMapping.Name + "Specified";
540 for (int j = 0; j < members.Length; j++)
541 {
542 if (members[j].Name == text3)
543 {
545 break;
546 }
547 }
548 }
549 bool flag = false;
550 if (memberMapping.Text != null)
551 {
553 }
554 if (memberMapping.Attribute != null && memberMapping.Attribute.Any)
555 {
557 }
558 if (memberMapping.Attribute != null || memberMapping.Xmlns != null)
559 {
560 list3.Add(member);
561 }
562 else if (memberMapping.Text != null)
563 {
564 list2.Add(member);
565 }
566 if (!memberMapping.IsSequence)
567 {
568 for (int k = 0; k < memberMapping.Elements.Length; k++)
569 {
570 if (memberMapping.Elements[k].Any && memberMapping.Elements[k].Name.Length == 0)
571 {
573 if (memberMapping.Attribute == null && memberMapping.Text == null)
574 {
576 }
577 flag = true;
578 break;
579 }
580 }
581 }
582 if (memberMapping.Attribute != null || memberMapping.Text != null || flag)
583 {
584 list.Add(member2);
585 continue;
586 }
587 if (memberMapping.TypeDesc.IsArrayLike && (memberMapping.Elements.Length != 1 || !(memberMapping.Elements[0].Mapping is ArrayMapping)))
588 {
589 list.Add(member2);
591 continue;
592 }
593 if (memberMapping.TypeDesc.IsArrayLike && !memberMapping.TypeDesc.IsArray)
594 {
596 }
597 list.Add(member);
598 }
599 Member[] array = list.ToArray();
600 Member[] members2 = list2.ToArray();
601 if (array.Length != 0 && array[0].Mapping.IsReturnValue)
602 {
603 base.Writer.WriteLine("IsReturnValue = true;");
604 }
605 WriteParamsRead(members.Length);
606 if (list3.Count > 0)
607 {
608 Member[] members3 = list3.ToArray();
610 WriteAttributes(members3, anyAttribute, "UnknownNode", "(object)p");
612 base.Writer.WriteLine("Reader.MoveToElement();");
613 }
616 {
617 base.Writer.WriteLine("if (Reader.IsEmptyElement) { Reader.Skip(); Reader.MoveToContent(); continue; }");
618 base.Writer.WriteLine("Reader.ReadStartElement();");
619 }
620 if (IsSequence(array))
621 {
622 base.Writer.WriteLine("int state = 0;");
623 }
625 base.Writer.Indent++;
626 string text4 = "UnknownNode((object)p, " + ExpectedElements(array) + ");";
628 base.Writer.WriteLine("Reader.MoveToContent();");
632 {
633 base.Writer.WriteLine("ReadEndElement();");
634 base.Writer.Indent--;
635 base.Writer.WriteLine("}");
636 WriteUnknownNode("UnknownNode", "null", accessor, anyIfs: true);
637 base.Writer.WriteLine("Reader.MoveToContent();");
639 }
640 base.Writer.WriteLine("return p;");
641 base.Writer.Indent--;
642 base.Writer.WriteLine("}");
643 return text;
644 }
645
647 {
648 for (int i = 0; i < mappings.Length; i++)
649 {
651 {
652 base.Writer.Write(arrayName);
653 base.Writer.Write("[");
654 base.Writer.Write(i.ToString(CultureInfo.InvariantCulture));
655 base.Writer.Write("] = ");
656 if (mappings[i].TypeDesc.IsOptionalValue && mappings[i].TypeDesc.BaseTypeDesc.UseReflection)
657 {
658 base.Writer.Write("null");
659 }
660 else
661 {
662 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(mappings[i].TypeDesc.CSharpName, mappings[i].TypeDesc.UseReflection, ctorInaccessible: false, cast: false));
663 }
664 base.Writer.WriteLine(";");
665 }
666 }
667 }
668
670 {
674 bool hasWrapperElement = membersMapping.HasWrapperElement;
675 bool writeAccessors = membersMapping.WriteAccessors;
676 string text = NextMethodName(accessor.Name);
677 base.Writer.WriteLine();
678 base.Writer.Write("public object[] ");
679 base.Writer.Write(text);
680 base.Writer.WriteLine("() {");
681 base.Writer.Indent++;
682 base.Writer.WriteLine("Reader.MoveToContent();");
683 base.Writer.Write("object[] p = new object[");
684 base.Writer.Write(members.Length.ToString(CultureInfo.InvariantCulture));
685 base.Writer.WriteLine("];");
688 {
690 if (membersMapping.ValidateRpcWrapperElement)
691 {
692 base.Writer.Write("if (!");
693 WriteXmlNodeEqual("Reader", accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
694 base.Writer.WriteLine(") throw CreateUnknownNodeException();");
695 }
696 base.Writer.WriteLine("bool isEmptyWrapper = Reader.IsEmptyElement;");
697 base.Writer.WriteLine("Reader.ReadStartElement();");
698 }
699 Member[] array = new Member[members.Length];
700 for (int i = 0; i < members.Length; i++)
701 {
703 string text2 = $"p[{i}]";
704 string arraySource = text2;
705 if (memberMapping.Xmlns != null)
706 {
707 arraySource = $"(({memberMapping.TypeDesc.CSharpName}){text2})";
708 }
709 Member member = new Member(this, text2, arraySource, "a", i, memberMapping);
710 if (!memberMapping.IsSequence)
711 {
712 member.ParamsReadSource = $"paramsRead[{i}]";
713 }
714 array[i] = member;
715 if (memberMapping.CheckSpecified != SpecifiedAccessor.ReadWrite)
716 {
717 continue;
718 }
719 string text3 = memberMapping.Name + "Specified";
720 for (int j = 0; j < members.Length; j++)
721 {
722 if (members[j].Name == text3)
723 {
725 break;
726 }
727 }
728 }
729 string fixupMethodName = "fixup_" + text;
731 if (array.Length != 0 && array[0].Mapping.IsReturnValue)
732 {
733 base.Writer.WriteLine("IsReturnValue = true;");
734 }
735 string text4 = ((!hasWrapperElement && !writeAccessors) ? "hrefList" : null);
736 if (text4 != null)
737 {
739 }
740 WriteParamsRead(members.Length);
742 base.Writer.Indent++;
743 string elementElseString = ((text4 == null) ? "UnknownNode((object)p);" : "if (Reader.GetAttribute(\"id\", null) != null) { ReadReferencedElement(); } else { UnknownNode((object)p); }");
744 WriteMemberElements(array, elementElseString, "UnknownNode((object)p);", null, null, text4);
745 base.Writer.WriteLine("Reader.MoveToContent();");
748 {
749 base.Writer.WriteLine("if (!isEmptyWrapper) ReadEndElement();");
750 }
751 if (text4 != null)
752 {
754 }
755 base.Writer.WriteLine("ReadReferencedElements();");
756 base.Writer.WriteLine("return p;");
757 base.Writer.Indent--;
758 base.Writer.WriteLine("}");
759 if (flag)
760 {
761 WriteFixupMethod(fixupMethodName, array, "object[]", useReflection: false, typed: false, "p");
762 }
763 return text;
764 }
765
767 {
768 bool useReflection = td.UseReflection;
769 string text = ((td.ArrayElementTypeDesc == null) ? "object" : td.ArrayElementTypeDesc.CSharpName) + "[]";
770 bool flag = td.ArrayElementTypeDesc != null && td.ArrayElementTypeDesc.UseReflection;
771 if (flag)
772 {
773 text = typeof(Array).FullName;
774 }
775 base.Writer.Write(text);
776 base.Writer.Write(" ");
777 base.Writer.Write("ci =");
778 base.Writer.Write("(" + text + ")");
779 base.Writer.Write(source);
780 base.Writer.WriteLine(";");
781 base.Writer.WriteLine("for (int i = 0; i < ci.Length; i++) {");
782 base.Writer.Indent++;
783 base.Writer.Write(base.RaCodeGen.GetStringForMethod("c", td.CSharpName, "Add", useReflection));
784 if (!flag)
785 {
786 base.Writer.Write("ci[i]");
787 }
788 else
789 {
790 base.Writer.Write(base.RaCodeGen.GetReflectionVariable(typeof(Array).FullName, "0") + "[ci , i]");
791 }
792 if (useReflection)
793 {
794 base.Writer.WriteLine("}");
795 }
796 base.Writer.WriteLine(");");
797 base.Writer.Indent--;
798 base.Writer.WriteLine("}");
799 }
800
802 {
804 TypeMapping mapping = accessor.Mapping;
805 string text = NextMethodName(accessor.Name);
806 base.Writer.WriteLine();
807 base.Writer.Write("public object ");
808 base.Writer.Write(text);
809 base.Writer.WriteLine("() {");
810 base.Writer.Indent++;
811 base.Writer.WriteLine("object o = null;");
815 Member[] array = new Member[1]
816 {
817 new Member(this, "o", "o", "a", 0, memberMapping)
818 };
819 base.Writer.WriteLine("Reader.MoveToContent();");
820 string elseString = "UnknownNode(null, " + ExpectedElements(array) + ");";
821 WriteMemberElements(array, "throw CreateUnknownNodeException();", elseString, accessor.Any ? array[0] : null, null, null);
822 if (accessor.IsSoap)
823 {
824 base.Writer.WriteLine("Referenced(o);");
825 base.Writer.WriteLine("ReadReferencedElements();");
826 }
827 base.Writer.WriteLine("return (object)o;");
828 base.Writer.Indent--;
829 base.Writer.WriteLine("}");
830 return text;
831 }
832
833 private string NextMethodName(string name)
834 {
837 handler.AppendLiteral("Read");
838 handler.AppendFormatted(++base.NextMethodNumber);
839 handler.AppendLiteral("_");
841 return string.Create(invariantCulture, ref handler);
842 }
843
844 private string NextIdName(string name)
845 {
848 handler.AppendLiteral("id");
850 handler.AppendLiteral("_");
852 return string.Create(invariantCulture, ref handler);
853 }
854
856 {
858 {
859 string text = ReferenceMapping(mapping);
860 if (text == null)
861 {
863 }
864 if (mapping.IsSoap)
865 {
866 base.Writer.Write("(");
867 base.Writer.Write(mapping.TypeDesc.CSharpName);
868 base.Writer.Write(")");
869 }
870 base.Writer.Write(text);
871 base.Writer.Write("(");
872 if (!mapping.IsSoap)
873 {
874 base.Writer.Write(source);
875 }
876 base.Writer.Write(")");
877 }
878 else if (mapping.TypeDesc == base.StringTypeDesc)
879 {
880 base.Writer.Write(source);
881 }
882 else if (mapping.TypeDesc.FormatterName == "String")
883 {
884 if (mapping.TypeDesc.CollapseWhitespace)
885 {
886 base.Writer.Write("CollapseWhitespace(");
887 base.Writer.Write(source);
888 base.Writer.Write(")");
889 }
890 else
891 {
892 base.Writer.Write(source);
893 }
894 }
895 else
896 {
897 if (!mapping.TypeDesc.HasCustomFormatter)
898 {
899 base.Writer.Write(typeof(XmlConvert).FullName);
900 base.Writer.Write(".");
901 }
902 base.Writer.Write("To");
903 base.Writer.Write(mapping.TypeDesc.FormatterName);
904 base.Writer.Write("(");
905 base.Writer.Write(source);
906 base.Writer.Write(")");
907 }
908 }
909
910 private string MakeUnique(EnumMapping mapping, string name)
911 {
912 string text = name;
913 object obj = Enums[text];
914 if (obj != null)
915 {
916 if (obj == mapping)
917 {
918 return null;
919 }
920 int num = 0;
921 while (obj != null)
922 {
923 num++;
924 text = name + num.ToString(CultureInfo.InvariantCulture);
925 obj = Enums[text];
926 }
927 }
928 Enums.Add(text, mapping);
929 return text;
930 }
931
932 private string WriteHashtable(EnumMapping mapping, string typeName)
933 {
935 string text = MakeUnique(mapping, typeName + "Values");
936 if (text == null)
937 {
938 return CodeIdentifier.GetCSharpName(typeName);
939 }
940 string s = MakeUnique(mapping, "_" + text);
942 base.Writer.WriteLine();
943 base.Writer.Write(typeof(Hashtable).FullName);
944 base.Writer.Write(" ");
945 base.Writer.Write(s);
946 base.Writer.WriteLine(";");
947 base.Writer.WriteLine();
948 base.Writer.Write("internal ");
949 base.Writer.Write(typeof(Hashtable).FullName);
950 base.Writer.Write(" ");
951 base.Writer.Write(text);
952 base.Writer.WriteLine(" {");
953 base.Writer.Indent++;
954 base.Writer.WriteLine("get {");
955 base.Writer.Indent++;
956 base.Writer.Write("if ((object)");
957 base.Writer.Write(s);
958 base.Writer.WriteLine(" == null) {");
959 base.Writer.Indent++;
960 base.Writer.Write(typeof(Hashtable).FullName);
961 base.Writer.Write(" h = new ");
962 base.Writer.Write(typeof(Hashtable).FullName);
963 base.Writer.WriteLine("();");
964 ConstantMapping[] constants = mapping.Constants;
965 for (int i = 0; i < constants.Length; i++)
966 {
967 base.Writer.Write("h.Add(");
969 if (!mapping.TypeDesc.UseReflection)
970 {
971 base.Writer.Write(", (long)");
972 base.Writer.Write(mapping.TypeDesc.CSharpName);
973 base.Writer.Write(".@");
975 base.Writer.Write(constants[i].Name);
976 }
977 else
978 {
979 base.Writer.Write(", ");
980 IndentedWriter writer = base.Writer;
983 handler.AppendFormatted(constants[i].Value);
984 handler.AppendLiteral("L");
985 writer.Write(string.Create(invariantCulture, ref handler));
986 }
987 base.Writer.WriteLine(");");
988 }
989 base.Writer.Write(s);
990 base.Writer.WriteLine(" = h;");
991 base.Writer.Indent--;
992 base.Writer.WriteLine("}");
993 base.Writer.Write("return ");
994 base.Writer.Write(s);
995 base.Writer.WriteLine(";");
996 base.Writer.Indent--;
997 base.Writer.WriteLine("}");
998 base.Writer.Indent--;
999 base.Writer.WriteLine("}");
1000 return text;
1001 }
1002
1004 {
1005 string s = null;
1006 if (mapping.IsFlags)
1007 {
1008 s = WriteHashtable(mapping, mapping.TypeDesc.Name);
1009 }
1010 string s2 = (string)base.MethodNames[mapping];
1011 base.Writer.WriteLine();
1012 bool useReflection = mapping.TypeDesc.UseReflection;
1013 string cSharpName = mapping.TypeDesc.CSharpName;
1014 if (mapping.IsSoap)
1015 {
1016 base.Writer.Write("object");
1017 base.Writer.Write(" ");
1018 base.Writer.Write(s2);
1019 base.Writer.WriteLine("() {");
1020 base.Writer.Indent++;
1021 base.Writer.WriteLine("string s = Reader.ReadElementString();");
1022 }
1023 else
1024 {
1025 base.Writer.Write(useReflection ? "object" : cSharpName);
1026 base.Writer.Write(" ");
1027 base.Writer.Write(s2);
1028 base.Writer.WriteLine("(string s) {");
1029 base.Writer.Indent++;
1030 }
1031 ConstantMapping[] constants = mapping.Constants;
1032 if (mapping.IsFlags)
1033 {
1034 if (useReflection)
1035 {
1036 base.Writer.Write("return ");
1037 base.Writer.Write(typeof(Enum).FullName);
1038 base.Writer.Write(".ToObject(");
1039 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(cSharpName, useReflection));
1040 base.Writer.Write(", ToEnum(s, ");
1041 base.Writer.Write(s);
1042 base.Writer.Write(", ");
1044 base.Writer.WriteLine("));");
1045 }
1046 else
1047 {
1048 base.Writer.Write("return (");
1049 base.Writer.Write(cSharpName);
1050 base.Writer.Write(")ToEnum(s, ");
1051 base.Writer.Write(s);
1052 base.Writer.Write(", ");
1054 base.Writer.WriteLine(");");
1055 }
1056 }
1057 else
1058 {
1059 base.Writer.WriteLine("switch (s) {");
1060 base.Writer.Indent++;
1061 Hashtable hashtable = new Hashtable();
1063 {
1065 if (hashtable[constantMapping.XmlName] == null)
1066 {
1067 base.Writer.Write("case ");
1069 base.Writer.Write(": return ");
1070 base.Writer.Write(base.RaCodeGen.GetStringForEnumMember(cSharpName, constantMapping.Name, useReflection));
1071 base.Writer.WriteLine(";");
1072 hashtable[constantMapping.XmlName] = constantMapping.XmlName;
1073 }
1074 }
1075 base.Writer.Write("default: throw CreateUnknownConstantException(s, ");
1076 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(cSharpName, useReflection));
1077 base.Writer.WriteLine(");");
1078 base.Writer.Indent--;
1079 base.Writer.WriteLine("}");
1080 }
1081 base.Writer.Indent--;
1082 base.Writer.WriteLine("}");
1083 }
1084
1086 {
1087 for (StructMapping structMapping = mapping.DerivedMappings; structMapping != null; structMapping = structMapping.NextDerivedMapping)
1088 {
1089 base.Writer.Write("if (");
1090 WriteQNameEqual("xsiType", structMapping.TypeName, structMapping.Namespace);
1091 base.Writer.WriteLine(")");
1092 base.Writer.Indent++;
1094 base.Writer.Write("return ");
1095 if (structMapping.TypeDesc.UseReflection && isTypedReturn)
1096 {
1097 base.Writer.Write("(" + returnTypeName + ")");
1098 }
1099 base.Writer.Write(s);
1100 base.Writer.Write("(");
1101 if (structMapping.TypeDesc.IsNullable)
1102 {
1103 base.Writer.Write("isNullable, ");
1104 }
1105 base.Writer.WriteLine("false);");
1106 base.Writer.Indent--;
1108 }
1109 }
1110
1112 {
1113 TypeScope[] scopes = base.Scopes;
1114 foreach (TypeScope typeScope in scopes)
1115 {
1116 foreach (Mapping typeMapping in typeScope.TypeMappings)
1117 {
1118 if (typeMapping.IsSoap)
1119 {
1120 continue;
1121 }
1123 {
1125 base.Writer.Write("if (");
1126 WriteQNameEqual("xsiType", enumMapping.TypeName, enumMapping.Namespace);
1127 base.Writer.WriteLine(") {");
1128 base.Writer.Indent++;
1129 base.Writer.WriteLine("Reader.ReadStartElement();");
1130 string s = ReferenceMapping(enumMapping);
1131 base.Writer.Write("object e = ");
1132 base.Writer.Write(s);
1133 base.Writer.WriteLine("(CollapseWhitespace(Reader.ReadString()));");
1134 base.Writer.WriteLine("ReadEndElement();");
1135 base.Writer.WriteLine("return e;");
1136 base.Writer.Indent--;
1137 base.Writer.WriteLine("}");
1138 }
1139 else
1140 {
1142 {
1143 continue;
1144 }
1146 if (!arrayMapping.TypeDesc.HasDefaultConstructor)
1147 {
1148 continue;
1149 }
1150 base.Writer.Write("if (");
1151 WriteQNameEqual("xsiType", arrayMapping.TypeName, arrayMapping.Namespace);
1152 base.Writer.WriteLine(") {");
1153 base.Writer.Indent++;
1157 Member member = new Member(this, "a", "z", 0, memberMapping);
1158 TypeDesc typeDesc = arrayMapping.TypeDesc;
1159 string cSharpName = arrayMapping.TypeDesc.CSharpName;
1160 if (typeDesc.UseReflection)
1161 {
1162 if (typeDesc.IsArray)
1163 {
1164 base.Writer.Write(typeof(Array).FullName);
1165 }
1166 else
1167 {
1168 base.Writer.Write("object");
1169 }
1170 }
1171 else
1172 {
1173 base.Writer.Write(cSharpName);
1174 }
1175 base.Writer.Write(" a = ");
1176 if (arrayMapping.TypeDesc.IsValueType)
1177 {
1178 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(cSharpName, typeDesc.UseReflection, ctorInaccessible: false, cast: false));
1179 base.Writer.WriteLine(";");
1180 }
1181 else
1182 {
1183 base.Writer.WriteLine("null;");
1184 }
1185 WriteArray(member.Source, member.ArrayName, arrayMapping, readOnly: false, isNullable: false, -1);
1186 base.Writer.WriteLine("return a;");
1187 base.Writer.Indent--;
1188 base.Writer.WriteLine("}");
1189 }
1190 }
1191 }
1192 }
1193
1195 {
1196 string s = (string)base.MethodNames[nullableMapping];
1197 bool useReflection = nullableMapping.BaseMapping.TypeDesc.UseReflection;
1198 string s2 = (useReflection ? "object" : nullableMapping.TypeDesc.CSharpName);
1199 base.Writer.WriteLine();
1200 base.Writer.Write(s2);
1201 base.Writer.Write(" ");
1202 base.Writer.Write(s);
1203 base.Writer.WriteLine("(bool checkType) {");
1204 base.Writer.Indent++;
1205 base.Writer.Write(s2);
1206 base.Writer.Write(" o = ");
1207 if (useReflection)
1208 {
1209 base.Writer.Write("null");
1210 }
1211 else
1212 {
1213 base.Writer.Write("default(");
1214 base.Writer.Write(s2);
1215 base.Writer.Write(")");
1216 }
1217 base.Writer.WriteLine(";");
1218 base.Writer.WriteLine("if (ReadNull())");
1219 base.Writer.Indent++;
1220 base.Writer.WriteLine("return o;");
1221 base.Writer.Indent--;
1224 elementAccessor.Any = false;
1225 elementAccessor.IsNullable = nullableMapping.BaseMapping.TypeDesc.IsNullable;
1226 WriteElement("o", null, null, elementAccessor, null, null, checkForNull: false, readOnly: false, -1, -1);
1227 base.Writer.WriteLine("return o;");
1228 base.Writer.Indent--;
1229 base.Writer.WriteLine("}");
1230 }
1231
1233 {
1234 if (structMapping.IsSoap)
1235 {
1237 }
1238 else
1239 {
1241 }
1242 }
1243
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 }
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 {
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 }
1463
1465 {
1466 if (structMapping.TypeDesc.IsRoot)
1467 {
1468 return;
1469 }
1470 string text = (string)base.MethodNames[structMapping];
1471 base.Writer.WriteLine();
1472 base.Writer.Write("object");
1473 base.Writer.Write(" ");
1474 base.Writer.Write(text);
1475 base.Writer.Write("(");
1476 base.Writer.WriteLine(") {");
1477 base.Writer.Indent++;
1478 Member[] array;
1479 bool flag;
1480 string fixupMethodName;
1481 if (structMapping.TypeDesc.IsAbstract)
1482 {
1483 base.Writer.Write("throw CreateAbstractTypeException(");
1485 base.Writer.Write(", ");
1487 base.Writer.WriteLine(");");
1488 array = Array.Empty<Member>();
1489 flag = false;
1490 fixupMethodName = null;
1491 }
1492 else
1493 {
1496 array = new Member[settableMembers.Length];
1497 for (int i = 0; i < settableMembers.Length; i++)
1498 {
1501 string stringForMember = base.RaCodeGen.GetStringForMember("o", memberMapping.Name, structMapping.TypeDesc);
1503 if (memberMapping.CheckSpecified == SpecifiedAccessor.ReadWrite)
1504 {
1505 member.CheckSpecifiedSource = base.RaCodeGen.GetStringForMember("o", memberMapping.Name + "Specified", structMapping.TypeDesc);
1506 }
1507 if (!memberMapping.IsSequence)
1508 {
1509 member.ParamsReadSource = $"paramsRead[{i}]";
1510 }
1511 array[i] = member;
1512 }
1513 fixupMethodName = "fixup_" + text;
1516 WriteAttributes(array, null, "UnknownNode", "(object)o");
1517 base.Writer.WriteLine("Reader.MoveToElement();");
1518 base.Writer.WriteLine("if (Reader.IsEmptyElement) { Reader.Skip(); return o; }");
1519 base.Writer.WriteLine("Reader.ReadStartElement();");
1521 base.Writer.Indent++;
1522 WriteMemberElements(array, "UnknownNode((object)o);", "UnknownNode((object)o);", null, null, null);
1523 base.Writer.WriteLine("Reader.MoveToContent();");
1525 base.Writer.WriteLine("ReadEndElement();");
1526 base.Writer.WriteLine("return o;");
1527 }
1528 base.Writer.Indent--;
1529 base.Writer.WriteLine("}");
1530 if (flag)
1531 {
1532 WriteFixupMethod(fixupMethodName, array, structMapping.TypeDesc.CSharpName, structMapping.TypeDesc.UseReflection, typed: true, "o");
1533 }
1534 }
1535
1536 private void WriteFixupMethod(string fixupMethodName, Member[] members, string typeName, bool useReflection, bool typed, string source)
1537 {
1538 base.Writer.WriteLine();
1539 base.Writer.Write("void ");
1540 base.Writer.Write(fixupMethodName);
1541 base.Writer.WriteLine("(object objFixup) {");
1542 base.Writer.Indent++;
1543 base.Writer.WriteLine("Fixup fixup = (Fixup)objFixup;");
1544 WriteLocalDecl(typeName, source, "fixup.Source", useReflection);
1545 base.Writer.WriteLine("string[] ids = fixup.Ids;");
1546 foreach (Member member in members)
1547 {
1548 if (!member.MultiRef)
1549 {
1550 continue;
1551 }
1552 string text = member.FixupIndex.ToString(CultureInfo.InvariantCulture);
1553 base.Writer.Write("if (ids[");
1554 base.Writer.Write(text);
1555 base.Writer.WriteLine("] != null) {");
1556 base.Writer.Indent++;
1557 string arraySource = member.ArraySource;
1558 string text2 = "GetTarget(ids[" + text + "])";
1560 if (typeDesc.IsCollection || typeDesc.IsEnumerable)
1561 {
1563 }
1564 else
1565 {
1566 if (typed)
1567 {
1568 base.Writer.WriteLine("try {");
1569 base.Writer.Indent++;
1571 }
1572 else
1573 {
1575 }
1576 base.Writer.Write(text2);
1578 base.Writer.WriteLine(";");
1579 if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite && member.CheckSpecifiedSource != null && member.CheckSpecifiedSource.Length > 0)
1580 {
1581 base.Writer.Write(member.CheckSpecifiedSource);
1582 base.Writer.WriteLine(" = true;");
1583 }
1584 if (typed)
1585 {
1586 WriteCatchCastException(member.Mapping.TypeDesc, text2, "ids[" + text + "]");
1587 }
1588 }
1589 base.Writer.Indent--;
1590 base.Writer.WriteLine("}");
1591 }
1592 base.Writer.Indent--;
1593 base.Writer.WriteLine("}");
1594 }
1595
1597 {
1598 base.Writer.WriteLine("// get array of the collection items");
1600 if (createCollectionInfo == null)
1601 {
1604 handler.AppendLiteral("create");
1606 handler.AppendLiteral("_");
1607 handler.AppendFormatted(typeDesc.Name);
1608 string name = string.Create(invariantCulture, ref handler);
1611 }
1612 base.Writer.Write("if ((object)(");
1613 base.Writer.Write(memberSource);
1614 base.Writer.WriteLine(") == null) {");
1615 base.Writer.Indent++;
1616 if (readOnly)
1617 {
1618 base.Writer.Write("throw CreateReadOnlyCollectionException(");
1620 base.Writer.WriteLine(");");
1621 }
1622 else
1623 {
1624 base.Writer.Write(memberSource);
1625 base.Writer.Write(" = ");
1626 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(typeDesc.CSharpName, typeDesc.UseReflection, typeDesc.CannotNew, cast: true));
1627 base.Writer.WriteLine(";");
1628 }
1629 base.Writer.Indent--;
1630 base.Writer.WriteLine("}");
1631 base.Writer.Write("CollectionFixup collectionFixup = new CollectionFixup(");
1632 base.Writer.Write(memberSource);
1633 base.Writer.Write(", ");
1634 base.Writer.Write("new ");
1635 base.Writer.Write(typeof(XmlSerializationCollectionFixupCallback).FullName);
1636 base.Writer.Write("(this.");
1637 base.Writer.Write(createCollectionInfo.Name);
1638 base.Writer.Write("), ");
1639 base.Writer.Write(targetSource);
1640 base.Writer.WriteLine(");");
1641 base.Writer.WriteLine("AddFixup(collectionFixup);");
1642 }
1643
1645 {
1646 base.Writer.Write("void ");
1647 base.Writer.Write(c.Name);
1648 base.Writer.WriteLine("(object collection, object collectionItems) {");
1649 base.Writer.Indent++;
1650 base.Writer.WriteLine("if (collectionItems == null) return;");
1651 base.Writer.WriteLine("if (collection == null) return;");
1653 bool useReflection = typeDesc.UseReflection;
1654 string cSharpName = typeDesc.CSharpName;
1655 WriteLocalDecl(cSharpName, "c", "collection", useReflection);
1656 WriteCreateCollection(typeDesc, "collectionItems");
1657 base.Writer.Indent--;
1658 base.Writer.WriteLine("}");
1659 }
1660
1661 private void WriteQNameEqual(string source, string name, string ns)
1662 {
1663 base.Writer.Write("((object) ((");
1664 base.Writer.Write(typeof(XmlQualifiedName).FullName);
1665 base.Writer.Write(")");
1666 base.Writer.Write(source);
1667 base.Writer.Write(").Name == (object)");
1668 WriteID(name);
1669 base.Writer.Write(" && (object) ((");
1670 base.Writer.Write(typeof(XmlQualifiedName).FullName);
1671 base.Writer.Write(")");
1672 base.Writer.Write(source);
1673 base.Writer.Write(").Namespace == (object)");
1674 WriteID(ns);
1675 base.Writer.Write(")");
1676 }
1677
1678 private void WriteXmlNodeEqual(string source, string name, string ns)
1679 {
1680 base.Writer.Write("(");
1681 if (name != null && name.Length > 0)
1682 {
1683 base.Writer.Write("(object) ");
1684 base.Writer.Write(source);
1685 base.Writer.Write(".LocalName == (object)");
1686 WriteID(name);
1687 base.Writer.Write(" && ");
1688 }
1689 base.Writer.Write("(object) ");
1690 base.Writer.Write(source);
1691 base.Writer.Write(".NamespaceURI == (object)");
1692 WriteID(ns);
1693 base.Writer.Write(")");
1694 }
1695
1696 private void WriteID(string name)
1697 {
1698 if (name == null)
1699 {
1700 name = "";
1701 }
1702 string text = (string)_idNames[name];
1703 if (text == null)
1704 {
1705 text = NextIdName(name);
1706 _idNames.Add(name, text);
1707 }
1708 base.Writer.Write(text);
1709 }
1710
1712 {
1713 int num = 0;
1714 Member member = null;
1716 base.Writer.WriteLine("while (Reader.MoveToNextAttribute()) {");
1717 base.Writer.Indent++;
1718 foreach (Member member2 in members)
1719 {
1720 if (member2.Mapping.Xmlns != null)
1721 {
1722 member = member2;
1723 }
1724 else
1725 {
1726 if (member2.Mapping.Ignore)
1727 {
1728 continue;
1729 }
1730 AttributeAccessor attribute = member2.Mapping.Attribute;
1731 if (attribute != null && !attribute.Any)
1732 {
1734 if (num++ > 0)
1735 {
1736 base.Writer.Write("else ");
1737 }
1738 base.Writer.Write("if (");
1739 if (member2.ParamsReadSource != null)
1740 {
1741 base.Writer.Write("!");
1742 base.Writer.Write(member2.ParamsReadSource);
1743 base.Writer.Write(" && ");
1744 }
1745 if (attribute.IsSpecialXmlNamespace)
1746 {
1747 WriteXmlNodeEqual("Reader", attribute.Name, "http://www.w3.org/XML/1998/namespace");
1748 }
1749 else
1750 {
1751 WriteXmlNodeEqual("Reader", attribute.Name, (attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : "");
1752 }
1753 base.Writer.WriteLine(") {");
1754 base.Writer.Indent++;
1756 base.Writer.Indent--;
1757 base.Writer.WriteLine("}");
1758 }
1759 }
1760 }
1761 if (num > 0)
1762 {
1763 base.Writer.Write("else ");
1764 }
1765 if (member != null)
1766 {
1767 base.Writer.WriteLine("if (IsXmlnsAttribute(Reader.Name)) {");
1768 base.Writer.Indent++;
1769 base.Writer.Write("if (");
1770 base.Writer.Write(member.Source);
1771 base.Writer.Write(" == null) ");
1772 base.Writer.Write(member.Source);
1773 base.Writer.Write(" = new ");
1774 base.Writer.Write(member.Mapping.TypeDesc.CSharpName);
1775 base.Writer.WriteLine("();");
1776 base.Writer.Write("((" + member.Mapping.TypeDesc.CSharpName + ")" + member.ArraySource + ")");
1777 base.Writer.WriteLine(".Add(Reader.Name.Length == 5 ? \"\" : Reader.LocalName, Reader.Value);");
1778 base.Writer.Indent--;
1779 base.Writer.WriteLine("}");
1780 base.Writer.WriteLine("else {");
1781 base.Writer.Indent++;
1782 }
1783 else
1784 {
1785 base.Writer.WriteLine("if (!IsXmlnsAttribute(Reader.Name)) {");
1786 base.Writer.Indent++;
1787 }
1788 if (anyAttribute != null)
1789 {
1790 base.Writer.Write(typeof(XmlAttribute).FullName);
1791 base.Writer.Write(" attr = ");
1792 base.Writer.Write("(");
1793 base.Writer.Write(typeof(XmlAttribute).FullName);
1794 base.Writer.WriteLine(") Document.ReadNode(Reader);");
1795 base.Writer.WriteLine("ParseWsdlArrayType(attr);");
1797 }
1798 else
1799 {
1800 base.Writer.Write(elseCall);
1801 base.Writer.Write("(");
1802 base.Writer.Write(firstParam);
1803 if (arrayList.Count > 0)
1804 {
1805 base.Writer.Write(", ");
1806 string text = "";
1807 for (int j = 0; j < arrayList.Count; j++)
1808 {
1810 if (j > 0)
1811 {
1812 text += ", ";
1813 }
1814 text += (attributeAccessor.IsSpecialXmlNamespace ? "http://www.w3.org/XML/1998/namespace" : (((attributeAccessor.Form == XmlSchemaForm.Qualified) ? attributeAccessor.Namespace : "") + ":" + attributeAccessor.Name));
1815 }
1817 }
1818 base.Writer.WriteLine(");");
1819 }
1820 base.Writer.Indent--;
1821 base.Writer.WriteLine("}");
1822 base.Writer.Indent--;
1823 base.Writer.WriteLine("}");
1824 }
1825
1826 private void WriteAttribute(Member member)
1827 {
1829 if (attribute.Mapping is SpecialMapping)
1830 {
1832 if (specialMapping.TypeDesc.Kind == TypeKind.Attribute)
1833 {
1835 base.Writer.Write("attr");
1837 base.Writer.WriteLine(";");
1838 }
1839 else
1840 {
1841 if (!specialMapping.TypeDesc.CanBeAttributeValue)
1842 {
1844 }
1845 base.Writer.Write("if (attr is ");
1846 base.Writer.Write(typeof(XmlAttribute).FullName);
1847 base.Writer.WriteLine(") {");
1848 base.Writer.Indent++;
1850 base.Writer.Write("(");
1851 base.Writer.Write(typeof(XmlAttribute).FullName);
1852 base.Writer.Write(")attr");
1854 base.Writer.WriteLine(";");
1855 base.Writer.Indent--;
1856 base.Writer.WriteLine("}");
1857 }
1858 }
1859 else if (attribute.IsList)
1860 {
1861 base.Writer.WriteLine("string listValues = Reader.Value;");
1862 base.Writer.WriteLine("string[] vals = listValues.Split(null);");
1863 base.Writer.WriteLine("for (int i = 0; i < vals.Length; i++) {");
1864 base.Writer.Indent++;
1865 string arraySource = GetArraySource(member.Mapping.TypeDesc, member.ArrayName);
1867 WritePrimitive(attribute.Mapping, "vals[i]");
1869 base.Writer.WriteLine(";");
1870 base.Writer.Indent--;
1871 base.Writer.WriteLine("}");
1872 }
1873 else
1874 {
1876 WritePrimitive(attribute.Mapping, attribute.IsList ? "vals[i]" : "Reader.Value");
1878 base.Writer.WriteLine(";");
1879 }
1880 if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite && member.CheckSpecifiedSource != null && member.CheckSpecifiedSource.Length > 0)
1881 {
1882 base.Writer.Write(member.CheckSpecifiedSource);
1883 base.Writer.WriteLine(" = true;");
1884 }
1885 if (member.ParamsReadSource != null)
1886 {
1887 base.Writer.Write(member.ParamsReadSource);
1888 base.Writer.WriteLine(" = true;");
1889 }
1890 }
1891
1893 {
1894 int num = 0;
1895 foreach (Member member in members)
1896 {
1897 if (member.Mapping.Elements.Length != 0)
1898 {
1901 {
1902 member.MultiRef = true;
1903 member.FixupIndex = num++;
1904 }
1905 }
1906 }
1907 if (num > 0)
1908 {
1909 base.Writer.Write("Fixup fixup = new Fixup(");
1910 base.Writer.Write(source);
1911 base.Writer.Write(", ");
1912 base.Writer.Write("new ");
1914 base.Writer.Write("(this.");
1915 base.Writer.Write(fixupMethodName);
1916 base.Writer.Write("), ");
1917 base.Writer.Write(num.ToString(CultureInfo.InvariantCulture));
1918 base.Writer.WriteLine(");");
1919 base.Writer.WriteLine("AddFixup(fixup);");
1920 return true;
1921 }
1922 return false;
1923 }
1924
1926 {
1927 foreach (Member member in members)
1928 {
1929 if (!member.IsArrayLike)
1930 {
1931 continue;
1932 }
1933 string arrayName = member.ArrayName;
1934 string s = "c" + arrayName;
1936 string cSharpName = typeDesc.CSharpName;
1937 if (member.Mapping.TypeDesc.IsArray)
1938 {
1939 WriteArrayLocalDecl(typeDesc.CSharpName, arrayName, "null", typeDesc);
1940 base.Writer.Write("int ");
1941 base.Writer.Write(s);
1942 base.Writer.WriteLine(" = 0;");
1943 if (member.Mapping.ChoiceIdentifier != null)
1944 {
1946 base.Writer.Write("int c");
1947 base.Writer.Write(member.ChoiceArrayName);
1948 base.Writer.WriteLine(" = 0;");
1949 }
1950 continue;
1951 }
1952 bool useReflection = typeDesc.UseReflection;
1953 if (member.Source[member.Source.Length - 1] == '(' || member.Source[member.Source.Length - 1] == '{')
1954 {
1956 base.Writer.Write(member.Source);
1957 base.Writer.Write(arrayName);
1958 if (member.Source[member.Source.Length - 1] == '{')
1959 {
1960 base.Writer.WriteLine("});");
1961 }
1962 else
1963 {
1964 base.Writer.WriteLine(");");
1965 }
1966 continue;
1967 }
1968 if (member.IsList && !member.Mapping.ReadOnly && member.Mapping.TypeDesc.IsNullable)
1969 {
1970 base.Writer.Write("if ((object)(");
1971 base.Writer.Write(member.Source);
1972 base.Writer.Write(") == null) ");
1974 {
1975 base.Writer.Write("throw CreateReadOnlyCollectionException(");
1977 base.Writer.WriteLine(");");
1978 }
1979 else
1980 {
1981 base.Writer.Write(member.Source);
1982 base.Writer.Write(" = ");
1983 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(cSharpName, useReflection, typeDesc.CannotNew, cast: true));
1984 base.Writer.WriteLine(";");
1985 }
1986 }
1988 }
1989 }
1990
1992 {
1993 if (IsSequence(members))
1994 {
1995 return "null";
1996 }
1997 string text = string.Empty;
1998 bool flag = true;
1999 foreach (Member member in members)
2000 {
2001 if (member.Mapping.Xmlns != null || member.Mapping.Ignore || member.Mapping.IsText || member.Mapping.IsAttribute)
2002 {
2003 continue;
2004 }
2005 ElementAccessor[] elements = member.Mapping.Elements;
2006 foreach (ElementAccessor elementAccessor in elements)
2007 {
2008 string text2 = ((elementAccessor.Form == XmlSchemaForm.Qualified) ? elementAccessor.Namespace : "");
2009 if (!elementAccessor.Any || (elementAccessor.Name != null && elementAccessor.Name.Length != 0))
2010 {
2011 if (!flag)
2012 {
2013 text += ", ";
2014 }
2015 text = text + text2 + ":" + elementAccessor.Name;
2016 flag = false;
2017 }
2018 }
2019 }
2022 return stringWriter.ToString();
2023 }
2024
2026 {
2027 bool flag = checkTypeHrefsSource != null && checkTypeHrefsSource.Length > 0;
2028 if (anyText != null)
2029 {
2030 base.Writer.WriteLine("string tmp = null;");
2031 }
2032 base.Writer.Write("if (Reader.NodeType == ");
2033 base.Writer.Write(typeof(XmlNodeType).FullName);
2034 base.Writer.WriteLine(".Element) {");
2035 base.Writer.Indent++;
2036 if (flag)
2037 {
2038 WriteIfNotSoapRoot(elementElseString + " continue;");
2040 }
2041 else
2042 {
2044 }
2045 base.Writer.Indent--;
2046 base.Writer.WriteLine("}");
2047 if (anyText != null)
2048 {
2050 }
2051 base.Writer.WriteLine("else {");
2052 base.Writer.Indent++;
2053 base.Writer.WriteLine(elseString);
2054 base.Writer.Indent--;
2055 base.Writer.WriteLine("}");
2056 }
2057
2059 {
2060 base.Writer.Write("else if (Reader.NodeType == ");
2061 base.Writer.Write(typeof(XmlNodeType).FullName);
2062 base.Writer.WriteLine(".Text || ");
2063 base.Writer.Write("Reader.NodeType == ");
2064 base.Writer.Write(typeof(XmlNodeType).FullName);
2065 base.Writer.WriteLine(".CDATA || ");
2066 base.Writer.Write("Reader.NodeType == ");
2067 base.Writer.Write(typeof(XmlNodeType).FullName);
2068 base.Writer.WriteLine(".Whitespace || ");
2069 base.Writer.Write("Reader.NodeType == ");
2070 base.Writer.Write(typeof(XmlNodeType).FullName);
2071 base.Writer.WriteLine(".SignificantWhitespace) {");
2072 base.Writer.Indent++;
2073 if (anyText != null)
2074 {
2076 }
2077 else
2078 {
2079 base.Writer.Write(elseString);
2080 base.Writer.WriteLine(";");
2081 }
2082 base.Writer.Indent--;
2083 base.Writer.WriteLine("}");
2084 }
2085
2086 private void WriteText(Member member)
2087 {
2088 TextAccessor text = member.Mapping.Text;
2089 if (text.Mapping is SpecialMapping)
2090 {
2093 TypeKind kind = specialMapping.TypeDesc.Kind;
2094 if (kind != TypeKind.Node)
2095 {
2097 }
2098 base.Writer.Write("Document.CreateTextNode(Reader.ReadString())");
2100 }
2101 else
2102 {
2103 if (member.IsArrayLike)
2104 {
2106 if (text.Mapping.TypeDesc.CollapseWhitespace)
2107 {
2108 base.Writer.Write("CollapseWhitespace(Reader.ReadString())");
2109 }
2110 else
2111 {
2112 base.Writer.Write("Reader.ReadString()");
2113 }
2114 }
2115 else if (text.Mapping.TypeDesc == base.StringTypeDesc || text.Mapping.TypeDesc.FormatterName == "String")
2116 {
2117 base.Writer.Write("tmp = ReadString(tmp, ");
2118 if (text.Mapping.TypeDesc.CollapseWhitespace)
2119 {
2120 base.Writer.WriteLine("true);");
2121 }
2122 else
2123 {
2124 base.Writer.WriteLine("false);");
2125 }
2127 base.Writer.Write("tmp");
2128 }
2129 else
2130 {
2132 WritePrimitive(text.Mapping, "Reader.ReadString()");
2133 }
2135 }
2136 base.Writer.WriteLine(";");
2137 }
2138
2140 {
2141 base.Writer.WriteLine("string refElemId = null;");
2142 base.Writer.WriteLine("object refElem = ReadReferencingElement(null, null, true, out refElemId);");
2143 base.Writer.WriteLine("if (refElemId != null) {");
2144 base.Writer.Indent++;
2145 base.Writer.Write(checkTypeHrefsSource);
2146 base.Writer.WriteLine(".Add(refElemId);");
2147 base.Writer.Write(checkTypeHrefsSource);
2148 base.Writer.WriteLine("IsObject.Add(false);");
2149 base.Writer.Indent--;
2150 base.Writer.WriteLine("}");
2151 base.Writer.WriteLine("else if (refElem != null) {");
2152 base.Writer.Indent++;
2153 base.Writer.Write(checkTypeHrefsSource);
2154 base.Writer.WriteLine(".Add(refElem);");
2155 base.Writer.Write(checkTypeHrefsSource);
2156 base.Writer.WriteLine("IsObject.Add(true);");
2157 base.Writer.Indent--;
2158 base.Writer.WriteLine("}");
2159 }
2160
2162 {
2163 if (anyElement != null)
2164 {
2165 ElementAccessor[] elements = anyElement.Mapping.Elements;
2166 for (int i = 0; i < elements.Length; i++)
2167 {
2168 ElementAccessor elementAccessor = elements[i];
2169 if (elementAccessor.Any && elementAccessor.Name.Length == 0)
2170 {
2171 WriteElement(anyElement.ArraySource, anyElement.ArrayName, anyElement.ChoiceArraySource, elementAccessor, anyElement.Mapping.ChoiceIdentifier, (anyElement.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite) ? anyElement.CheckSpecifiedSource : null, checkForNull: false, readOnly: false, -1, i);
2172 break;
2173 }
2174 }
2175 }
2176 else
2177 {
2178 base.Writer.WriteLine(elementElseString);
2179 }
2180 }
2181
2182 private bool IsSequence(Member[] members)
2183 {
2184 for (int i = 0; i < members.Length; i++)
2185 {
2186 if (members[i].Mapping.IsParticle && members[i].Mapping.IsSequence)
2187 {
2188 return true;
2189 }
2190 }
2191 return false;
2192 }
2193
2195 {
2196 bool flag = checkTypeSource != null && checkTypeSource.Length > 0;
2197 int num = 0;
2198 bool flag2 = IsSequence(members);
2199 if (flag2)
2200 {
2201 base.Writer.WriteLine("switch (state) {");
2202 }
2203 int num2 = 0;
2204 foreach (Member member in members)
2205 {
2206 if (member.Mapping.Xmlns != null || member.Mapping.Ignore || (flag2 && (member.Mapping.IsText || member.Mapping.IsAttribute)))
2207 {
2208 continue;
2209 }
2210 bool flag3 = true;
2212 ElementAccessor[] elements = member.Mapping.Elements;
2213 for (int j = 0; j < elements.Length; j++)
2214 {
2215 ElementAccessor elementAccessor = elements[j];
2216 string ns = ((elementAccessor.Form == XmlSchemaForm.Qualified) ? elementAccessor.Namespace : "");
2217 if (!flag2 && elementAccessor.Any && (elementAccessor.Name == null || elementAccessor.Name.Length == 0))
2218 {
2219 continue;
2220 }
2221 if (!flag2)
2222 {
2223 if (flag3 && num == 0)
2224 {
2225 base.Writer.WriteLine("do {");
2226 base.Writer.Indent++;
2227 }
2228 }
2229 else if (!flag3 || (!flag2 && num > 0))
2230 {
2231 base.Writer.Write("else ");
2232 }
2233 else if (flag2)
2234 {
2235 base.Writer.Write("case ");
2236 base.Writer.Write(num2.ToString(CultureInfo.InvariantCulture));
2237 base.Writer.WriteLine(":");
2238 base.Writer.Indent++;
2239 }
2240 num++;
2241 flag3 = false;
2242 base.Writer.Write("if (");
2243 if (member.ParamsReadSource != null)
2244 {
2245 base.Writer.Write("!");
2246 base.Writer.Write(member.ParamsReadSource);
2247 base.Writer.Write(" && ");
2248 }
2249 if (flag)
2250 {
2252 {
2253 TypeDesc typeDesc = ((NullableMapping)elementAccessor.Mapping).BaseMapping.TypeDesc;
2254 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(typeDesc.CSharpName, typeDesc.UseReflection));
2255 }
2256 else
2257 {
2258 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(elementAccessor.Mapping.TypeDesc.CSharpName, elementAccessor.Mapping.TypeDesc.UseReflection));
2259 }
2260 base.Writer.Write(".IsAssignableFrom(");
2261 base.Writer.Write(checkTypeSource);
2262 base.Writer.Write("Type)");
2263 }
2264 else
2265 {
2266 if (member.Mapping.IsReturnValue)
2267 {
2268 base.Writer.Write("(IsReturnValue || ");
2269 }
2270 if (flag2 && elementAccessor.Any && elementAccessor.AnyNamespaces == null)
2271 {
2272 base.Writer.Write("true");
2273 }
2274 else
2275 {
2276 WriteXmlNodeEqual("Reader", elementAccessor.Name, ns);
2277 }
2278 if (member.Mapping.IsReturnValue)
2279 {
2280 base.Writer.Write(")");
2281 }
2282 }
2283 base.Writer.WriteLine(") {");
2284 base.Writer.Indent++;
2285 if (flag)
2286 {
2287 if (elementAccessor.Mapping.TypeDesc.IsValueType || elementAccessor.Mapping is NullableMapping)
2288 {
2289 base.Writer.Write("if (");
2290 base.Writer.Write(checkTypeSource);
2291 base.Writer.WriteLine(" != null) {");
2292 base.Writer.Indent++;
2293 }
2295 {
2297 TypeDesc typeDesc2 = ((NullableMapping)elementAccessor.Mapping).BaseMapping.TypeDesc;
2298 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(elementAccessor.Mapping.TypeDesc.CSharpName, elementAccessor.Mapping.TypeDesc.UseReflection, ctorInaccessible: false, cast: true, "(" + typeDesc2.CSharpName + ")" + checkTypeSource));
2299 }
2300 else
2301 {
2302 WriteSourceBeginTyped(member.ArraySource, elementAccessor.Mapping.TypeDesc);
2303 base.Writer.Write(checkTypeSource);
2304 }
2306 base.Writer.WriteLine(";");
2307 if (elementAccessor.Mapping.TypeDesc.IsValueType)
2308 {
2309 base.Writer.Indent--;
2310 base.Writer.WriteLine("}");
2311 }
2312 if (member.FixupIndex >= 0)
2313 {
2314 base.Writer.Write("fixup.Ids[");
2315 base.Writer.Write(member.FixupIndex.ToString(CultureInfo.InvariantCulture));
2316 base.Writer.Write("] = ");
2317 base.Writer.Write(checkTypeSource);
2318 base.Writer.WriteLine("Id;");
2319 }
2320 }
2321 else
2322 {
2324 }
2325 if (member.Mapping.IsReturnValue)
2326 {
2327 base.Writer.WriteLine("IsReturnValue = false;");
2328 }
2329 if (member.ParamsReadSource != null)
2330 {
2331 base.Writer.Write(member.ParamsReadSource);
2332 base.Writer.WriteLine(" = true;");
2333 }
2334 if (!flag2)
2335 {
2336 base.Writer.WriteLine("break;");
2337 }
2338 base.Writer.Indent--;
2339 base.Writer.WriteLine("}");
2340 }
2341 if (flag2)
2342 {
2343 if (member.IsArrayLike)
2344 {
2345 base.Writer.WriteLine("else {");
2346 base.Writer.Indent++;
2347 }
2348 num2++;
2349 base.Writer.Write("state = ");
2350 base.Writer.Write(num2.ToString(CultureInfo.InvariantCulture));
2351 base.Writer.WriteLine(";");
2352 if (member.IsArrayLike)
2353 {
2354 base.Writer.Indent--;
2355 base.Writer.WriteLine("}");
2356 }
2357 base.Writer.WriteLine("break;");
2358 base.Writer.Indent--;
2359 }
2360 }
2361 if (num > 0 && flag2)
2362 {
2363 base.Writer.WriteLine("default:");
2364 base.Writer.Indent++;
2365 }
2367 if (num > 0)
2368 {
2369 if (flag2)
2370 {
2371 base.Writer.WriteLine("break;");
2372 }
2373 base.Writer.Indent--;
2374 if (!flag2)
2375 {
2376 base.Writer.WriteLine("} while (false);");
2377 }
2378 else
2379 {
2380 base.Writer.WriteLine("}");
2381 }
2382 }
2383 }
2384
2386 {
2387 return GetArraySource(typeDesc, arrayName, multiRef: false);
2388 }
2389
2390 private string GetArraySource(TypeDesc typeDesc, string arrayName, bool multiRef)
2391 {
2392 string text = "c" + arrayName;
2393 string text2 = "";
2394 if (multiRef)
2395 {
2396 text2 = "soap = (System.Object[])EnsureArrayIndex(soap, " + text + "+2, typeof(System.Object)); ";
2397 }
2398 bool useReflection = typeDesc.UseReflection;
2399 if (typeDesc.IsArray)
2400 {
2401 string cSharpName = typeDesc.ArrayElementTypeDesc.CSharpName;
2402 bool useReflection2 = typeDesc.ArrayElementTypeDesc.UseReflection;
2403 string text3 = (useReflection ? "" : ("(" + cSharpName + "[])"));
2404 text2 = text2 + arrayName + " = " + text3 + "EnsureArrayIndex(" + arrayName + ", " + text + ", " + base.RaCodeGen.GetStringForTypeof(cSharpName, useReflection2) + ");";
2405 string stringForArrayMember = base.RaCodeGen.GetStringForArrayMember(arrayName, text + "++", typeDesc);
2406 if (multiRef)
2407 {
2408 text2 = text2 + " soap[1] = " + arrayName + ";";
2409 text2 = text2 + " if (ReadReference(out soap[" + text + "+2])) " + stringForArrayMember + " = null; else ";
2410 }
2411 return text2 + stringForArrayMember;
2412 }
2413 return base.RaCodeGen.GetStringForMethod(arrayName, typeDesc.CSharpName, "Add", useReflection);
2414 }
2415
2417 {
2419 }
2420
2422 {
2423 foreach (Member member in members)
2424 {
2425 if (!member.IsArrayLike)
2426 {
2427 continue;
2428 }
2430 if (typeDesc.IsArray)
2431 {
2432 WriteSourceBegin(member.Source);
2433 if (soapRefs)
2434 {
2435 base.Writer.Write(" soap[1] = ");
2436 }
2437 string arrayName = member.ArrayName;
2438 string s = "c" + arrayName;
2439 bool useReflection = typeDesc.ArrayElementTypeDesc.UseReflection;
2440 string cSharpName = typeDesc.ArrayElementTypeDesc.CSharpName;
2441 if (!useReflection)
2442 {
2443 base.Writer.Write("(" + cSharpName + "[])");
2444 }
2445 base.Writer.Write("ShrinkArray(");
2446 base.Writer.Write(arrayName);
2447 base.Writer.Write(", ");
2448 base.Writer.Write(s);
2449 base.Writer.Write(", ");
2450 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(cSharpName, useReflection));
2451 base.Writer.Write(", ");
2453 base.Writer.Write(")");
2454 WriteSourceEnd(member.Source);
2455 base.Writer.WriteLine(";");
2456 if (member.Mapping.ChoiceIdentifier != null)
2457 {
2459 arrayName = member.ChoiceArrayName;
2460 s = "c" + arrayName;
2463 if (!useReflection2)
2464 {
2465 base.Writer.Write("(" + cSharpName2 + "[])");
2466 }
2467 base.Writer.Write("ShrinkArray(");
2468 base.Writer.Write(arrayName);
2469 base.Writer.Write(", ");
2470 base.Writer.Write(s);
2471 base.Writer.Write(", ");
2472 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(cSharpName2, useReflection2));
2473 base.Writer.Write(", ");
2475 base.Writer.Write(")");
2477 base.Writer.WriteLine(";");
2478 }
2479 }
2480 else if (typeDesc.IsValueType)
2481 {
2482 base.Writer.Write(member.Source);
2483 base.Writer.Write(" = ");
2484 base.Writer.Write(member.ArrayName);
2485 base.Writer.WriteLine(";");
2486 }
2487 }
2488 }
2489
2491 {
2493 if (typeDesc != null && !typeDesc.UseReflection)
2494 {
2495 base.Writer.Write("(");
2496 base.Writer.Write(typeDesc.CSharpName);
2497 base.Writer.Write(")");
2498 }
2499 }
2500
2501 private void WriteSourceBegin(string source)
2502 {
2503 base.Writer.Write(source);
2504 if (source[source.Length - 1] != '(' && source[source.Length - 1] != '{')
2505 {
2506 base.Writer.Write(" = ");
2507 }
2508 }
2509
2510 private void WriteSourceEnd(string source)
2511 {
2512 if (source[source.Length - 1] == '(')
2513 {
2514 base.Writer.Write(")");
2515 }
2516 else if (source[source.Length - 1] == '{')
2517 {
2518 base.Writer.Write("})");
2519 }
2520 }
2521
2522 private void WriteArray(string source, string arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex)
2523 {
2524 if (arrayMapping.IsSoap)
2525 {
2526 base.Writer.Write("object rre = ");
2527 base.Writer.Write((fixupIndex >= 0) ? "ReadReferencingElement" : "ReadReferencedElement");
2528 base.Writer.Write("(");
2529 WriteID(arrayMapping.TypeName);
2530 base.Writer.Write(", ");
2531 WriteID(arrayMapping.Namespace);
2532 if (fixupIndex >= 0)
2533 {
2534 base.Writer.Write(", ");
2535 base.Writer.Write("out fixup.Ids[");
2536 base.Writer.Write(fixupIndex.ToString(CultureInfo.InvariantCulture));
2537 base.Writer.Write("]");
2538 }
2539 base.Writer.WriteLine(");");
2540 TypeDesc typeDesc = arrayMapping.TypeDesc;
2541 if (typeDesc.IsEnumerable || typeDesc.IsCollection)
2542 {
2543 base.Writer.WriteLine("if (rre != null) {");
2544 base.Writer.Indent++;
2546 base.Writer.Indent--;
2547 base.Writer.WriteLine("}");
2548 }
2549 else
2550 {
2551 base.Writer.WriteLine("try {");
2552 base.Writer.Indent++;
2554 base.Writer.Write("rre");
2556 base.Writer.WriteLine(";");
2557 WriteCatchCastException(arrayMapping.TypeDesc, "rre", null);
2558 }
2559 return;
2560 }
2561 base.Writer.WriteLine("if (!ReadNull()) {");
2562 base.Writer.Indent++;
2567 Member member = new Member(this, source, arrayName, 0, memberMapping, multiRef: false);
2568 member.IsNullable = false;
2569 Member[] members = new Member[1] { member };
2571 if (readOnly)
2572 {
2573 base.Writer.Write("if (((object)(");
2574 base.Writer.Write(member.ArrayName);
2575 base.Writer.Write(") == null) || ");
2576 }
2577 else
2578 {
2579 base.Writer.Write("if (");
2580 }
2581 base.Writer.WriteLine("(Reader.IsEmptyElement)) {");
2582 base.Writer.Indent++;
2583 base.Writer.WriteLine("Reader.Skip();");
2584 base.Writer.Indent--;
2585 base.Writer.WriteLine("}");
2586 base.Writer.WriteLine("else {");
2587 base.Writer.Indent++;
2588 base.Writer.WriteLine("Reader.ReadStartElement();");
2590 base.Writer.Indent++;
2591 string text = "UnknownNode(null, " + ExpectedElements(members) + ");";
2592 WriteMemberElements(members, text, text, null, null, null);
2593 base.Writer.WriteLine("Reader.MoveToContent();");
2595 base.Writer.Indent--;
2596 base.Writer.WriteLine("ReadEndElement();");
2597 base.Writer.WriteLine("}");
2599 base.Writer.Indent--;
2600 base.Writer.WriteLine("}");
2601 if (isNullable)
2602 {
2603 base.Writer.WriteLine("else {");
2604 base.Writer.Indent++;
2605 member.IsNullable = true;
2608 base.Writer.Indent--;
2609 base.Writer.WriteLine("}");
2610 }
2611 }
2612
2614 {
2615 if (checkSpecified != null && checkSpecified.Length > 0)
2616 {
2617 base.Writer.Write(checkSpecified);
2618 base.Writer.WriteLine(" = true;");
2619 }
2620 if (element.Mapping is ArrayMapping)
2621 {
2623 }
2624 else if (element.Mapping is NullableMapping)
2625 {
2626 string s = ReferenceMapping(element.Mapping);
2628 base.Writer.Write(s);
2629 base.Writer.Write("(true)");
2631 base.Writer.WriteLine(";");
2632 }
2633 else if (!element.Mapping.IsSoap && element.Mapping is PrimitiveMapping)
2634 {
2635 if (element.IsNullable)
2636 {
2637 base.Writer.WriteLine("if (ReadNull()) {");
2638 base.Writer.Indent++;
2640 if (element.Mapping.TypeDesc.IsValueType)
2641 {
2642 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(element.Mapping.TypeDesc.CSharpName, element.Mapping.TypeDesc.UseReflection, ctorInaccessible: false, cast: false));
2643 }
2644 else
2645 {
2646 base.Writer.Write("null");
2647 }
2649 base.Writer.WriteLine(";");
2650 base.Writer.Indent--;
2651 base.Writer.WriteLine("}");
2652 base.Writer.Write("else ");
2653 }
2654 if (element.Default != null && element.Default != DBNull.Value && element.Mapping.TypeDesc.IsValueType)
2655 {
2656 base.Writer.WriteLine("if (Reader.IsEmptyElement) {");
2657 base.Writer.Indent++;
2658 base.Writer.WriteLine("Reader.Skip();");
2659 base.Writer.Indent--;
2660 base.Writer.WriteLine("}");
2661 base.Writer.WriteLine("else {");
2662 }
2663 else
2664 {
2665 base.Writer.WriteLine("{");
2666 }
2667 base.Writer.Indent++;
2669 {
2670 base.Writer.WriteLine("if (Reader.IsEmptyElement) {");
2671 base.Writer.Indent++;
2672 base.Writer.WriteLine("Reader.Skip();");
2674 if (element.Mapping.TypeDesc.Type == typeof(TimeSpan))
2675 {
2676 base.Writer.Write("default(System.TimeSpan)");
2677 }
2678 else if (element.Mapping.TypeDesc.Type == typeof(DateTimeOffset))
2679 {
2680 base.Writer.Write("default(System.DateTimeOffset)");
2681 }
2683 base.Writer.WriteLine(";");
2684 base.Writer.Indent--;
2685 base.Writer.WriteLine("}");
2686 base.Writer.WriteLine("else {");
2687 base.Writer.Indent++;
2689 WritePrimitive(element.Mapping, "Reader.ReadElementString()");
2691 base.Writer.WriteLine(";");
2692 base.Writer.Indent--;
2693 base.Writer.WriteLine("}");
2694 }
2695 else
2696 {
2698 if (element.Mapping.TypeDesc == base.QnameTypeDesc)
2699 {
2700 base.Writer.Write("ReadElementQualifiedName()");
2701 }
2702 else
2703 {
2705 WritePrimitive(source: (!(formatterName == "ByteArrayBase64") && !(formatterName == "ByteArrayHex")) ? "Reader.ReadElementString()" : "false", mapping: element.Mapping);
2706 }
2708 base.Writer.WriteLine(";");
2709 }
2710 base.Writer.Indent--;
2711 base.Writer.WriteLine("}");
2712 }
2713 else if (element.Mapping is StructMapping || (element.Mapping.IsSoap && element.Mapping is PrimitiveMapping))
2714 {
2715 TypeMapping mapping = element.Mapping;
2716 if (mapping.IsSoap)
2717 {
2718 base.Writer.Write("object rre = ");
2719 base.Writer.Write((fixupIndex >= 0) ? "ReadReferencingElement" : "ReadReferencedElement");
2720 base.Writer.Write("(");
2721 WriteID(mapping.TypeName);
2722 base.Writer.Write(", ");
2723 WriteID(mapping.Namespace);
2724 if (fixupIndex >= 0)
2725 {
2726 base.Writer.Write(", out fixup.Ids[");
2727 base.Writer.Write(fixupIndex.ToString(CultureInfo.InvariantCulture));
2728 base.Writer.Write("]");
2729 }
2730 base.Writer.Write(")");
2732 base.Writer.WriteLine(";");
2733 if (mapping.TypeDesc.IsValueType)
2734 {
2735 base.Writer.WriteLine("if (rre != null) {");
2736 base.Writer.Indent++;
2737 }
2738 base.Writer.WriteLine("try {");
2739 base.Writer.Indent++;
2741 base.Writer.Write("rre");
2743 base.Writer.WriteLine(";");
2744 WriteCatchCastException(mapping.TypeDesc, "rre", null);
2745 base.Writer.Write("Referenced(");
2746 base.Writer.Write(source);
2747 base.Writer.WriteLine(");");
2748 if (mapping.TypeDesc.IsValueType)
2749 {
2750 base.Writer.Indent--;
2751 base.Writer.WriteLine("}");
2752 }
2753 }
2754 else
2755 {
2756 string s2 = ReferenceMapping(mapping);
2757 if (checkForNull)
2758 {
2759 base.Writer.Write("if ((object)(");
2760 base.Writer.Write(arrayName);
2761 base.Writer.Write(") == null) Reader.Skip(); else ");
2762 }
2764 base.Writer.Write(s2);
2765 base.Writer.Write("(");
2766 if (mapping.TypeDesc.IsNullable)
2767 {
2769 base.Writer.Write(", ");
2770 }
2771 base.Writer.Write("true");
2772 base.Writer.Write(")");
2774 base.Writer.WriteLine(";");
2775 }
2776 }
2777 else
2778 {
2779 if (!(element.Mapping is SpecialMapping))
2780 {
2782 }
2784 switch (specialMapping.TypeDesc.Kind)
2785 {
2786 case TypeKind.Node:
2787 {
2790 base.Writer.Write(flag2 ? "ReadXmlDocument(" : "ReadXmlNode(");
2791 base.Writer.Write(element.Any ? "false" : "true");
2792 base.Writer.Write(")");
2794 base.Writer.WriteLine(";");
2795 break;
2796 }
2797 case TypeKind.Serializable:
2798 {
2800 if (serializableMapping.DerivedMappings != null)
2801 {
2802 base.Writer.Write(typeof(XmlQualifiedName).FullName);
2803 base.Writer.WriteLine(" tser = GetXsiType();");
2804 base.Writer.Write("if (tser == null");
2805 base.Writer.Write(" || ");
2806 WriteQNameEqual("tser", serializableMapping.XsiType.Name, serializableMapping.XsiType.Namespace);
2807 base.Writer.WriteLine(") {");
2808 base.Writer.Indent++;
2809 }
2811 base.Writer.Write("ReadSerializable(( ");
2812 base.Writer.Write(typeof(IXmlSerializable).FullName);
2813 base.Writer.Write(")");
2814 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(serializableMapping.TypeDesc.CSharpName, serializableMapping.TypeDesc.UseReflection, serializableMapping.TypeDesc.CannotNew, cast: false));
2816 if (flag)
2817 {
2818 base.Writer.WriteLine(", true");
2819 }
2820 base.Writer.Write(")");
2822 base.Writer.WriteLine(";");
2823 if (serializableMapping.DerivedMappings != null)
2824 {
2825 base.Writer.Indent--;
2826 base.Writer.WriteLine("}");
2828 WriteUnknownNode("UnknownNode", "null", null, anyIfs: true);
2829 }
2830 break;
2831 }
2832 default:
2834 }
2835 }
2836 if (choice != null)
2837 {
2838 string cSharpName = choice.Mapping.TypeDesc.CSharpName;
2839 base.Writer.Write(choiceSource);
2840 base.Writer.Write(" = ");
2842 base.Writer.Write(base.RaCodeGen.GetStringForEnumMember(cSharpName, choice.MemberIds[elementIndex], choice.Mapping.TypeDesc.UseReflection));
2843 base.Writer.WriteLine(";");
2844 }
2845 }
2846
2848 {
2849 if (mapping == null)
2850 {
2851 return;
2852 }
2854 {
2855 base.Writer.Write("else if (tser == null");
2856 base.Writer.Write(" || ");
2857 WriteQNameEqual("tser", serializableMapping.XsiType.Name, serializableMapping.XsiType.Namespace);
2858 base.Writer.WriteLine(") {");
2859 base.Writer.Indent++;
2860 if (serializableMapping.Type != null)
2861 {
2863 {
2865 base.Writer.Write("ReadSerializable(( ");
2866 base.Writer.Write(typeof(IXmlSerializable).FullName);
2867 base.Writer.Write(")");
2868 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(serializableMapping.TypeDesc.CSharpName, serializableMapping.TypeDesc.UseReflection, serializableMapping.TypeDesc.CannotNew, cast: false));
2869 if (isWrappedAny)
2870 {
2871 base.Writer.WriteLine(", true");
2872 }
2873 base.Writer.Write(")");
2875 base.Writer.WriteLine(";");
2876 }
2877 else
2878 {
2879 base.Writer.Write("throw CreateBadDerivationException(");
2881 base.Writer.Write(", ");
2883 base.Writer.Write(", ");
2885 base.Writer.Write(", ");
2887 base.Writer.Write(", ");
2889 base.Writer.Write(", ");
2891 base.Writer.WriteLine(");");
2892 }
2893 }
2894 else
2895 {
2896 base.Writer.WriteLine("// missing real mapping for " + serializableMapping.XsiType);
2897 base.Writer.Write("throw CreateMissingIXmlSerializableType(");
2899 base.Writer.Write(", ");
2901 base.Writer.Write(", ");
2903 base.Writer.WriteLine(");");
2904 }
2905 base.Writer.Indent--;
2906 base.Writer.WriteLine("}");
2908 }
2909 }
2910
2912 {
2913 base.Writer.WriteLine("Reader.MoveToContent();");
2914 base.Writer.Write("while (Reader.NodeType != ");
2915 base.Writer.Write(typeof(XmlNodeType).FullName);
2916 base.Writer.Write(".EndElement && Reader.NodeType != ");
2917 base.Writer.Write(typeof(XmlNodeType).FullName);
2918 base.Writer.WriteLine(".None) {");
2919 }
2920
2921 private void WriteWhileLoopEnd()
2922 {
2923 base.Writer.Indent--;
2924 base.Writer.WriteLine("}");
2925 }
2926
2927 private void WriteParamsRead(int length)
2928 {
2929 base.Writer.Write("bool[] paramsRead = new bool[");
2930 base.Writer.Write(length.ToString(CultureInfo.InvariantCulture));
2931 base.Writer.WriteLine("];");
2932 }
2933
2934 private void WriteReadNonRoots()
2935 {
2936 base.Writer.WriteLine("Reader.MoveToContent();");
2937 base.Writer.Write("while (Reader.NodeType == ");
2938 base.Writer.Write(typeof(XmlNodeType).FullName);
2939 base.Writer.WriteLine(".Element) {");
2940 base.Writer.Indent++;
2941 base.Writer.Write("string root = Reader.GetAttribute(\"root\", \"");
2942 base.Writer.Write("http://schemas.xmlsoap.org/soap/encoding/");
2943 base.Writer.WriteLine("\");");
2944 base.Writer.Write("if (root == null || ");
2945 base.Writer.Write(typeof(XmlConvert).FullName);
2946 base.Writer.WriteLine(".ToBoolean(root)) break;");
2947 base.Writer.WriteLine("ReadReferencedElement();");
2948 base.Writer.WriteLine("Reader.MoveToContent();");
2950 }
2951
2952 private void WriteBooleanValue(bool value)
2953 {
2954 base.Writer.Write(value ? "true" : "false");
2955 }
2956
2958 {
2959 base.Writer.Write(typeof(ArrayList).FullName);
2960 base.Writer.Write(" ");
2961 base.Writer.Write(source);
2962 base.Writer.Write(" = new ");
2963 base.Writer.Write(typeof(ArrayList).FullName);
2964 base.Writer.WriteLine("();");
2965 base.Writer.Write(typeof(ArrayList).FullName);
2966 base.Writer.Write(" ");
2967 base.Writer.Write(source);
2968 base.Writer.Write("IsObject = new ");
2969 base.Writer.Write(typeof(ArrayList).FullName);
2970 base.Writer.WriteLine("();");
2971 }
2972
2974 {
2975 base.Writer.WriteLine("int isObjectIndex = 0;");
2976 base.Writer.Write("foreach (object obj in ");
2977 base.Writer.Write(listSource);
2978 base.Writer.WriteLine(") {");
2979 base.Writer.Indent++;
2980 base.Writer.WriteLine("bool isReferenced = true;");
2981 base.Writer.Write("bool isObject = (bool)");
2982 base.Writer.Write(listSource);
2983 base.Writer.WriteLine("IsObject[isObjectIndex++];");
2984 base.Writer.WriteLine("object refObj = isObject ? obj : GetTarget((string)obj);");
2985 base.Writer.WriteLine("if (refObj == null) continue;");
2986 base.Writer.Write(typeof(Type).FullName);
2987 base.Writer.WriteLine(" refObjType = refObj.GetType();");
2988 base.Writer.WriteLine("string refObjId = null;");
2989 WriteMemberElementsIf(members, null, "isReferenced = false;", "refObj");
2990 base.Writer.WriteLine("if (isObject && isReferenced) Referenced(refObj); // need to mark this obj as ref'd since we didn't do GetTarget");
2991 base.Writer.Indent--;
2992 base.Writer.WriteLine("}");
2993 }
2994
2995 private void WriteIfNotSoapRoot(string source)
2996 {
2997 base.Writer.Write("if (Reader.GetAttribute(\"root\", \"");
2998 base.Writer.Write("http://schemas.xmlsoap.org/soap/encoding/");
2999 base.Writer.WriteLine("\") == \"0\") {");
3000 base.Writer.Indent++;
3001 base.Writer.WriteLine(source);
3002 base.Writer.Indent--;
3003 base.Writer.WriteLine("}");
3004 }
3005
3007 {
3008 string cSharpName = mapping.TypeDesc.CSharpName;
3009 bool useReflection = mapping.TypeDesc.UseReflection;
3010 bool cannotNew = mapping.TypeDesc.CannotNew;
3011 base.Writer.Write(useReflection ? "object" : cSharpName);
3012 base.Writer.Write(" ");
3013 base.Writer.Write(local);
3014 base.Writer.WriteLine(";");
3015 if (cannotNew)
3016 {
3017 base.Writer.WriteLine("try {");
3018 base.Writer.Indent++;
3019 }
3020 base.Writer.Write(local);
3021 base.Writer.Write(" = ");
3022 base.Writer.Write(base.RaCodeGen.GetStringForCreateInstance(cSharpName, useReflection, mapping.TypeDesc.CannotNew, cast: true));
3023 base.Writer.WriteLine(";");
3024 if (cannotNew)
3025 {
3027 base.Writer.Indent++;
3028 base.Writer.Write("throw CreateInaccessibleConstructorException(");
3030 base.Writer.WriteLine(");");
3032 base.Writer.Indent++;
3033 base.Writer.Write("throw CreateCtorHasSecurityException(");
3035 base.Writer.WriteLine(");");
3036 base.Writer.Indent--;
3037 base.Writer.WriteLine("}");
3038 }
3039 }
3040
3042 {
3043 base.Writer.Indent--;
3044 base.Writer.WriteLine("}");
3045 base.Writer.Write("catch (");
3046 base.Writer.Write(exceptionType.FullName);
3047 base.Writer.WriteLine(") {");
3048 }
3049
3050 private void WriteCatchCastException(TypeDesc typeDesc, string source, string id)
3051 {
3053 base.Writer.Indent++;
3054 base.Writer.Write("throw CreateInvalidCastException(");
3055 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(typeDesc.CSharpName, typeDesc.UseReflection));
3056 base.Writer.Write(", ");
3057 base.Writer.Write(source);
3058 if (id == null)
3059 {
3060 base.Writer.WriteLine(", null);");
3061 }
3062 else
3063 {
3064 base.Writer.Write(", (string)");
3065 base.Writer.Write(id);
3066 base.Writer.WriteLine(");");
3067 }
3068 base.Writer.Indent--;
3069 base.Writer.WriteLine("}");
3070 }
3071
3072 private void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
3073 {
3074 base.RaCodeGen.WriteArrayLocalDecl(typeName, variableName, initValue, arrayTypeDesc);
3075 }
3076
3078 {
3079 base.RaCodeGen.WriteCreateInstance(escapedName, source, useReflection, ctorInaccessible);
3080 }
3081
3082 private void WriteLocalDecl(string typeFullName, string variableName, string initValue, bool useReflection)
3083 {
3084 base.RaCodeGen.WriteLocalDecl(typeFullName, variableName, initValue, useReflection);
3085 }
3086}
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
virtual ICollection Values
Definition Hashtable.cs:534
virtual ICollection Keys
Definition Hashtable.cs:532
virtual void Add(object key, object? value)
Definition Hashtable.cs:676
static readonly DBNull Value
Definition DBNull.cs:8
static CultureInfo InvariantCulture
static string XmlInternalError
Definition SR.cs:1812
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlMissingMethodEnum
Definition SR.cs:1508
static string XmlSequenceHierarchy
Definition SR.cs:1800
Definition SR.cs:7
virtual bool IsAssignableFrom([NotNullWhen(true)] Type? c)
Definition Type.cs:1561
string? FullName
Definition Type.cs:47
static void CheckValidIdentifier([NotNull] string ident)
static string MakeValidInternal(string identifier)
static string GetCSharpName(string name)
static void WriteQuotedCSharpString(IndentedWriter writer, string value)
static MemberMapping[] GetSettableMembers(StructMapping structMapping)
Definition TypeScope.cs:628
Member(XmlSerializationReaderCodeGen outerClass, string source, string arraySource, string arrayName, int i, MemberMapping mapping)
Member(XmlSerializationReaderCodeGen outerClass, string source, string arrayName, int i, MemberMapping mapping, bool multiRef)
Member(XmlSerializationReaderCodeGen outerClass, string source, string arrayName, int i, MemberMapping mapping, string choiceSource)
Member(XmlSerializationReaderCodeGen outerClass, string source, string arraySource, string arrayName, int i, MemberMapping mapping, bool multiRef, string choiceSource)
Member(XmlSerializationReaderCodeGen outerClass, string source, string arrayName, int i, MemberMapping mapping)
Member(XmlSerializationReaderCodeGen outerClass, string source, string arraySource, string arrayName, int i, MemberMapping mapping, string choiceSource)
void WriteAttributes(Member[] members, Member anyAttribute, string elseCall, string firstParam)
void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string returnTypeName)
string GetChoiceIdentifierSource(MemberMapping mapping, string parent, TypeDesc parentTypeDesc)
void WriteAddCollectionFixup(TypeDesc typeDesc, bool readOnly, string memberSource, string targetSource)
void GenerateEnd(string[] methods, XmlMapping[] xmlMappings, Type[] types)
void WriteMemberElements(Member[] members, string elementElseString, string elseString, Member anyElement, Member anyText, string checkTypeHrefsSource)
string GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping)
void WriteMemberElementsElse(Member anyElement, string elementElseString)
void WriteMemberElementsIf(Member[] members, Member anyElement, string elementElseString, string checkTypeSource)
string GetChoiceIdentifierSource(MemberMapping[] mappings, MemberMapping member)
XmlSerializationReaderCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className)
string WriteHashtable(EnumMapping mapping, string typeName)
void WriteLocalDecl(string typeFullName, string variableName, string initValue, bool useReflection)
void WriteElement(string source, string arrayName, string choiceSource, ElementAccessor element, ChoiceIdentifierAccessor choice, string checkSpecified, bool checkForNull, bool readOnly, int fixupIndex, int elementIndex)
void WriteCatchCastException(TypeDesc typeDesc, string source, string id)
void InitializeValueTypes(string arrayName, MemberMapping[] mappings)
string GetArraySource(TypeDesc typeDesc, string arrayName, bool multiRef)
void WriteArray(string source, string arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex)
bool WriteMemberFixupBegin(Member[] members, string fixupMethodName, string source)
void WriteCreateInstance(string escapedName, string source, bool useReflection, bool ctorInaccessible)
string GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping)
void WriteDerivedSerializable(SerializableMapping head, SerializableMapping mapping, string source, bool isWrappedAny)
string GenerateMembersElement(XmlMembersMapping xmlMembersMapping)
void WriteFixupMethod(string fixupMethodName, Member[] members, string typeName, bool useReflection, bool typed, string source)
void WriteUnknownNode(string func, string node, ElementAccessor e, bool anyIfs)
void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
delegate void XmlSerializationCollectionFixupCallback(object? collection, object? collectionItems)
delegate void XmlSerializationFixupCallback(object fixup)
delegate? object XmlSerializationReadCallback()