Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlSerializationWriterCodeGen.cs
Go to the documentation of this file.
4using System.Text;
6
8
10{
11 [RequiresUnreferencedCode("creates XmlSerializationCodeGen")]
13 : base(writer, scopes, access, className)
14 {
15 }
16
17 [RequiresUnreferencedCode("calls WriteStructMethod")]
18 internal void GenerateBegin()
19 {
20 base.Writer.Write(base.Access);
21 base.Writer.Write(" class ");
22 base.Writer.Write(base.ClassName);
23 base.Writer.Write(" : ");
25 base.Writer.WriteLine(" {");
26 base.Writer.Indent++;
27 TypeScope[] scopes = base.Scopes;
28 foreach (TypeScope typeScope in scopes)
29 {
30 foreach (TypeMapping typeMapping3 in typeScope.TypeMappings)
31 {
33 {
34 base.MethodNames.Add(typeMapping3, NextMethodName(typeMapping3.TypeDesc.Name));
35 }
36 }
37 base.RaCodeGen.WriteReflectionInit(typeScope);
38 }
39 TypeScope[] scopes2 = base.Scopes;
40 foreach (TypeScope typeScope2 in scopes2)
41 {
42 foreach (TypeMapping typeMapping4 in typeScope2.TypeMappings)
43 {
44 if (typeMapping4.IsSoap)
45 {
47 {
49 }
51 {
53 }
54 }
55 }
56 }
57 }
58
59 [RequiresUnreferencedCode("calls WriteStructMethod")]
60 internal override void GenerateMethod(TypeMapping mapping)
61 {
62 if (!base.GeneratedMethods.Contains(mapping))
63 {
64 base.GeneratedMethods[mapping] = mapping;
66 {
68 }
69 else if (mapping is EnumMapping)
70 {
72 }
73 }
74 }
75
76 [RequiresUnreferencedCode("calls GenerateReferencedMethods")]
77 internal void GenerateEnd()
78 {
81 base.Writer.Indent--;
82 base.Writer.WriteLine("}");
83 }
84
85 [RequiresUnreferencedCode("calls GenerateMembersElement")]
87 {
88 if (!xmlMapping.IsWriteable)
89 {
90 return null;
91 }
92 if (!xmlMapping.GenerateSerializer)
93 {
94 throw new ArgumentException(System.SR.XmlInternalError, "xmlMapping");
95 }
97 {
99 }
101 {
103 }
104 throw new ArgumentException(System.SR.XmlInternalError, "xmlMapping");
105 }
106
108 {
109 base.Writer.WriteLine();
110 base.Writer.WriteLine("protected override void InitCallbacks() {");
111 base.Writer.Indent++;
112 TypeScope[] scopes = base.Scopes;
113 foreach (TypeScope typeScope in scopes)
114 {
115 foreach (TypeMapping typeMapping in typeScope.TypeMappings)
116 {
117 if (typeMapping.IsSoap && (typeMapping is StructMapping || typeMapping is EnumMapping) && !typeMapping.TypeDesc.IsRoot)
118 {
119 string s = (string)base.MethodNames[typeMapping];
120 base.Writer.Write("AddWriteCallback(");
121 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(typeMapping.TypeDesc.CSharpName, typeMapping.TypeDesc.UseReflection));
122 base.Writer.Write(", ");
124 base.Writer.Write(", ");
126 base.Writer.Write(", new ");
127 base.Writer.Write(typeof(XmlSerializationWriteCallback).FullName);
128 base.Writer.Write("(this.");
129 base.Writer.Write(s);
130 base.Writer.WriteLine("));");
131 }
132 }
133 }
134 base.Writer.Indent--;
135 base.Writer.WriteLine("}");
136 }
137
138 [RequiresUnreferencedCode("calls WriteCheckDefault")]
139 private void WriteQualifiedNameElement(string name, string ns, object defaultValue, string source, bool nullable, bool IsSoap, TypeMapping mapping)
140 {
141 bool flag = defaultValue != null && defaultValue != DBNull.Value;
142 if (flag)
143 {
145 base.Writer.WriteLine(" {");
146 base.Writer.Indent++;
147 }
148 string text = (IsSoap ? "Encoded" : "Literal");
149 base.Writer.Write(nullable ? ("WriteNullableQualifiedName" + text) : "WriteElementQualifiedName");
150 base.Writer.Write("(");
152 if (ns != null)
153 {
154 base.Writer.Write(", ");
156 }
157 base.Writer.Write(", ");
158 base.Writer.Write(source);
159 if (IsSoap)
160 {
161 base.Writer.Write(", new System.Xml.XmlQualifiedName(");
163 base.Writer.Write(", ");
165 base.Writer.Write(")");
166 }
167 base.Writer.WriteLine(");");
168 if (flag)
169 {
170 base.Writer.Indent--;
171 base.Writer.WriteLine("}");
172 }
173 }
174
176 {
177 string s = ReferenceMapping(mapping);
178 base.Writer.Write(s);
179 base.Writer.Write("(");
180 base.Writer.Write(source);
181 base.Writer.Write(")");
182 }
183
185 {
186 if (typeDesc == base.StringTypeDesc || typeDesc.FormatterName == "String")
187 {
188 base.Writer.Write(source);
189 }
190 else if (!typeDesc.HasCustomFormatter)
191 {
192 base.Writer.Write(typeof(XmlConvert).FullName);
193 base.Writer.Write(".ToString((");
194 base.Writer.Write(typeDesc.CSharpName);
195 base.Writer.Write(")");
196 base.Writer.Write(source);
197 base.Writer.Write(")");
198 }
199 else
200 {
201 base.Writer.Write("From");
202 base.Writer.Write(typeDesc.FormatterName);
203 base.Writer.Write("(");
204 base.Writer.Write(source);
205 base.Writer.Write(")");
206 }
207 }
208
209 [RequiresUnreferencedCode("calls WriteCheckDefault")]
210 private void WritePrimitive(string method, string name, string ns, object defaultValue, string source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)
211 {
213 bool flag = defaultValue != null && defaultValue != DBNull.Value && mapping.TypeDesc.HasDefaultSupport;
214 if (flag)
215 {
217 {
218 base.Writer.Write("if (");
219 if (mapping.TypeDesc.UseReflection)
220 {
221 base.Writer.Write(base.RaCodeGen.GetStringForEnumLongValue(source, mapping.TypeDesc.UseReflection));
222 }
223 else
224 {
225 base.Writer.Write(source);
226 }
227 base.Writer.Write(" != ");
228 if (((EnumMapping)mapping).IsFlags)
229 {
230 base.Writer.Write("(");
231 string[] array = ((string)defaultValue).Split((char[]?)null);
232 for (int i = 0; i < array.Length; i++)
233 {
234 if (array[i] != null && array[i].Length != 0)
235 {
236 if (i > 0)
237 {
238 base.Writer.WriteLine(" | ");
239 }
240 base.Writer.Write(base.RaCodeGen.GetStringForEnumCompare((EnumMapping)mapping, array[i], mapping.TypeDesc.UseReflection));
241 }
242 }
243 base.Writer.Write(")");
244 }
245 else
246 {
247 base.Writer.Write(base.RaCodeGen.GetStringForEnumCompare((EnumMapping)mapping, (string)defaultValue, mapping.TypeDesc.UseReflection));
248 }
249 base.Writer.Write(")");
250 }
251 else
252 {
254 }
255 base.Writer.WriteLine(" {");
256 base.Writer.Indent++;
257 }
258 base.Writer.Write(method);
259 base.Writer.Write("(");
261 if (ns != null)
262 {
263 base.Writer.Write(", ");
265 }
266 base.Writer.Write(", ");
268 {
270 }
271 else
272 {
274 }
275 if (writeXsiType)
276 {
277 base.Writer.Write(", new System.Xml.XmlQualifiedName(");
279 base.Writer.Write(", ");
281 base.Writer.Write(")");
282 }
283 base.Writer.WriteLine(");");
284 if (flag)
285 {
286 base.Writer.Indent--;
287 base.Writer.WriteLine("}");
288 }
289 }
290
291 private void WriteTag(string methodName, string name, string ns)
292 {
293 base.Writer.Write(methodName);
294 base.Writer.Write("(");
296 base.Writer.Write(", ");
297 if (ns == null)
298 {
299 base.Writer.Write("null");
300 }
301 else
302 {
304 }
305 base.Writer.WriteLine(");");
306 }
307
308 private void WriteTag(string methodName, string name, string ns, bool writePrefixed)
309 {
310 base.Writer.Write(methodName);
311 base.Writer.Write("(");
313 base.Writer.Write(", ");
314 if (ns == null)
315 {
316 base.Writer.Write("null");
317 }
318 else
319 {
321 }
322 base.Writer.Write(", null, ");
323 if (writePrefixed)
324 {
325 base.Writer.Write("true");
326 }
327 else
328 {
329 base.Writer.Write("false");
330 }
331 base.Writer.WriteLine(");");
332 }
333
334 private void WriteStartElement(string name, string ns, bool writePrefixed)
335 {
336 WriteTag("WriteStartElement", name, ns, writePrefixed);
337 }
338
339 private void WriteEndElement()
340 {
341 base.Writer.WriteLine("WriteEndElement();");
342 }
343
344 private void WriteEndElement(string source)
345 {
346 base.Writer.Write("WriteEndElement(");
347 base.Writer.Write(source);
348 base.Writer.WriteLine(");");
349 }
350
351 private void WriteEncodedNullTag(string name, string ns)
352 {
353 WriteTag("WriteNullTagEncoded", name, ns);
354 }
355
356 private void WriteLiteralNullTag(string name, string ns)
357 {
358 WriteTag("WriteNullTagLiteral", name, ns);
359 }
360
361 private void WriteEmptyTag(string name, string ns)
362 {
363 WriteTag("WriteEmptyTag", name, ns);
364 }
365
366 [RequiresUnreferencedCode("calls WriteMember")]
368 {
371 bool hasWrapperElement = membersMapping.HasWrapperElement;
372 bool writeAccessors = membersMapping.WriteAccessors;
374 string text = NextMethodName(accessor.Name);
375 base.Writer.WriteLine();
376 base.Writer.Write("public void ");
377 base.Writer.Write(text);
378 base.Writer.WriteLine("(object[] p) {");
379 base.Writer.Indent++;
380 base.Writer.WriteLine("WriteStartDocument();");
381 if (!membersMapping.IsSoap)
382 {
383 base.Writer.WriteLine("TopLevelElement();");
384 }
385 base.Writer.WriteLine("int pLength = p.Length;");
387 {
388 WriteStartElement(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "", membersMapping.IsSoap);
389 int num = FindXmlnsIndex(membersMapping.Members);
390 if (num >= 0)
391 {
392 string source = $"(({typeof(XmlSerializerNamespaces).FullName})p[{num}])";
393 base.Writer.Write("if (pLength > ");
394 base.Writer.Write(num.ToString(CultureInfo.InvariantCulture));
395 base.Writer.WriteLine(") {");
396 base.Writer.Indent++;
398 base.Writer.Indent--;
399 base.Writer.WriteLine("}");
400 }
401 for (int i = 0; i < membersMapping.Members.Length; i++)
402 {
404 if (memberMapping.Attribute == null || memberMapping.Ignore)
405 {
406 continue;
407 }
408 string text2 = i.ToString(CultureInfo.InvariantCulture);
409 string source2 = "p[" + text2 + "]";
410 string text3 = null;
411 int num2 = 0;
412 if (memberMapping.CheckSpecified != 0)
413 {
414 string text4 = memberMapping.Name + "Specified";
415 for (int j = 0; j < membersMapping.Members.Length; j++)
416 {
417 if (membersMapping.Members[j].Name == text4)
418 {
419 text3 = $"((bool) p[{j}])";
420 num2 = j;
421 break;
422 }
423 }
424 }
425 base.Writer.Write("if (pLength > ");
426 base.Writer.Write(text2);
427 base.Writer.WriteLine(") {");
428 base.Writer.Indent++;
429 if (text3 != null)
430 {
431 base.Writer.Write("if (pLength <= ");
432 base.Writer.Write(num2.ToString(CultureInfo.InvariantCulture));
433 base.Writer.Write(" || ");
434 base.Writer.Write(text3);
435 base.Writer.WriteLine(") {");
436 base.Writer.Indent++;
437 }
438 WriteMember(source2, memberMapping.Attribute, memberMapping.TypeDesc, "p");
439 if (text3 != null)
440 {
441 base.Writer.Indent--;
442 base.Writer.WriteLine("}");
443 }
444 base.Writer.Indent--;
445 base.Writer.WriteLine("}");
446 }
447 }
448 for (int k = 0; k < membersMapping.Members.Length; k++)
449 {
451 if (memberMapping2.Xmlns != null || memberMapping2.Ignore)
452 {
453 continue;
454 }
455 string text5 = null;
456 int num3 = 0;
457 if (memberMapping2.CheckSpecified != 0)
458 {
459 string text6 = memberMapping2.Name + "Specified";
460 for (int l = 0; l < membersMapping.Members.Length; l++)
461 {
462 if (membersMapping.Members[l].Name == text6)
463 {
464 text5 = $"((bool) p[{l}])";
465 num3 = l;
466 break;
467 }
468 }
469 }
470 string text7 = k.ToString(CultureInfo.InvariantCulture);
471 base.Writer.Write("if (pLength > ");
472 base.Writer.Write(text7);
473 base.Writer.WriteLine(") {");
474 base.Writer.Indent++;
475 if (text5 != null)
476 {
477 base.Writer.Write("if (pLength <= ");
478 base.Writer.Write(num3.ToString(CultureInfo.InvariantCulture));
479 base.Writer.Write(" || ");
480 base.Writer.Write(text5);
481 base.Writer.WriteLine(") {");
482 base.Writer.Indent++;
483 }
484 string source3 = "p[" + text7 + "]";
485 string choiceSource = null;
486 if (memberMapping2.ChoiceIdentifier != null)
487 {
488 for (int m = 0; m < membersMapping.Members.Length; m++)
489 {
490 if (membersMapping.Members[m].Name == memberMapping2.ChoiceIdentifier.MemberName)
491 {
492 choiceSource = ((!memberMapping2.ChoiceIdentifier.Mapping.TypeDesc.UseReflection) ? $"(({membersMapping.Members[m].TypeDesc.CSharpName})p[{m}])" : $"p[{m}]");
493 break;
494 }
495 }
496 }
497 if (flag && memberMapping2.IsReturnValue && memberMapping2.Elements.Length != 0)
498 {
499 base.Writer.Write("WriteRpcResult(");
500 WriteQuotedCSharpString(memberMapping2.Elements[0].Name);
501 base.Writer.Write(", ");
503 base.Writer.WriteLine(");");
504 }
505 WriteMember(source3, choiceSource, memberMapping2.ElementsSortedByDerivation, memberMapping2.Text, memberMapping2.ChoiceIdentifier, memberMapping2.TypeDesc, writeAccessors || hasWrapperElement);
506 if (text5 != null)
507 {
508 base.Writer.Indent--;
509 base.Writer.WriteLine("}");
510 }
511 base.Writer.Indent--;
512 base.Writer.WriteLine("}");
513 }
515 {
517 }
518 if (accessor.IsSoap)
519 {
521 {
522 base.Writer.Write("if (pLength > ");
523 base.Writer.Write(membersMapping.Members.Length.ToString(CultureInfo.InvariantCulture));
524 base.Writer.WriteLine(") {");
525 base.Writer.Indent++;
526 WriteExtraMembers(membersMapping.Members.Length.ToString(CultureInfo.InvariantCulture), "pLength");
527 base.Writer.Indent--;
528 base.Writer.WriteLine("}");
529 }
530 base.Writer.WriteLine("WriteReferencedElements();");
531 }
532 base.Writer.Indent--;
533 base.Writer.WriteLine("}");
534 return text;
535 }
536
537 [RequiresUnreferencedCode("calls WriteMember")]
539 {
542 string text = NextMethodName(accessor.Name);
543 base.Writer.WriteLine();
544 base.Writer.Write("public void ");
545 base.Writer.Write(text);
546 base.Writer.WriteLine("(object o) {");
547 base.Writer.Indent++;
548 base.Writer.WriteLine("WriteStartDocument();");
549 base.Writer.WriteLine("if (o == null) {");
550 base.Writer.Indent++;
551 if (accessor.IsNullable)
552 {
553 if (mapping.IsSoap)
554 {
555 WriteEncodedNullTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
556 }
557 else
558 {
559 WriteLiteralNullTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
560 }
561 }
562 else
563 {
564 WriteEmptyTag(accessor.Name, (accessor.Form == XmlSchemaForm.Qualified) ? accessor.Namespace : "");
565 }
566 base.Writer.WriteLine("return;");
567 base.Writer.Indent--;
568 base.Writer.WriteLine("}");
569 if (!mapping.IsSoap && !mapping.TypeDesc.IsValueType && !mapping.TypeDesc.Type.IsPrimitive)
570 {
571 base.Writer.WriteLine("TopLevelElement();");
572 }
573 WriteMember("o", null, new ElementAccessor[1] { accessor }, null, null, mapping.TypeDesc, !accessor.IsSoap);
574 if (mapping.IsSoap)
575 {
576 base.Writer.WriteLine("WriteReferencedElements();");
577 }
578 base.Writer.Indent--;
579 base.Writer.WriteLine("}");
580 return text;
581 }
582
583 private string NextMethodName(string name)
584 {
585 return "Write" + (++base.NextMethodNumber).ToString(null, NumberFormatInfo.InvariantInfo) + "_" + CodeIdentifier.MakeValidInternal(name);
586 }
587
589 {
590 string s = (string)base.MethodNames[mapping];
591 base.Writer.WriteLine();
592 string cSharpName = mapping.TypeDesc.CSharpName;
593 if (mapping.IsSoap)
594 {
595 base.Writer.Write("void ");
596 base.Writer.Write(s);
597 base.Writer.WriteLine("(object e) {");
598 WriteLocalDecl(cSharpName, "v", "e", mapping.TypeDesc.UseReflection);
599 }
600 else
601 {
602 base.Writer.Write("string ");
603 base.Writer.Write(s);
604 base.Writer.Write("(");
605 base.Writer.Write(mapping.TypeDesc.UseReflection ? "object" : cSharpName);
606 base.Writer.WriteLine(" v) {");
607 }
608 base.Writer.Indent++;
609 base.Writer.WriteLine("string s = null;");
610 ConstantMapping[] constants = mapping.Constants;
611 if (constants.Length != 0)
612 {
613 Hashtable hashtable = new Hashtable();
614 if (mapping.TypeDesc.UseReflection)
615 {
616 base.Writer.WriteLine("switch (" + base.RaCodeGen.GetStringForEnumLongValue("v", mapping.TypeDesc.UseReflection) + " ){");
617 }
618 else
619 {
620 base.Writer.WriteLine("switch (v) {");
621 }
622 base.Writer.Indent++;
624 {
625 if (hashtable[constantMapping.Value] == null)
626 {
627 WriteEnumCase(cSharpName, constantMapping, mapping.TypeDesc.UseReflection);
628 base.Writer.Write("s = ");
630 base.Writer.WriteLine("; break;");
631 hashtable.Add(constantMapping.Value, constantMapping.Value);
632 }
633 }
634 if (mapping.IsFlags)
635 {
636 base.Writer.Write("default: s = FromEnum(");
637 base.Writer.Write(base.RaCodeGen.GetStringForEnumLongValue("v", mapping.TypeDesc.UseReflection));
638 base.Writer.Write(", new string[] {");
639 base.Writer.Indent++;
640 for (int j = 0; j < constants.Length; j++)
641 {
643 if (j > 0)
644 {
645 base.Writer.WriteLine(", ");
646 }
648 }
649 base.Writer.Write("}, new ");
650 base.Writer.Write(typeof(long).FullName);
651 base.Writer.Write("[] {");
652 for (int k = 0; k < constants.Length; k++)
653 {
655 if (k > 0)
656 {
657 base.Writer.WriteLine(", ");
658 }
659 base.Writer.Write("(long)");
660 if (mapping.TypeDesc.UseReflection)
661 {
662 base.Writer.Write(constantMapping3.Value.ToString(CultureInfo.InvariantCulture));
663 continue;
664 }
665 base.Writer.Write(cSharpName);
666 base.Writer.Write(".@");
668 base.Writer.Write(constantMapping3.Name);
669 }
670 base.Writer.Indent--;
671 base.Writer.Write("}, ");
672 WriteQuotedCSharpString(mapping.TypeDesc.FullName);
673 base.Writer.WriteLine("); break;");
674 }
675 else
676 {
677 base.Writer.Write("default: throw CreateInvalidEnumValueException(");
678 base.Writer.Write(base.RaCodeGen.GetStringForEnumLongValue("v", mapping.TypeDesc.UseReflection));
679 base.Writer.Write(".ToString(System.Globalization.CultureInfo.InvariantCulture), ");
680 WriteQuotedCSharpString(mapping.TypeDesc.FullName);
681 base.Writer.WriteLine(");");
682 }
683 base.Writer.Indent--;
684 base.Writer.WriteLine("}");
685 }
686 if (mapping.IsSoap)
687 {
688 base.Writer.Write("WriteXsiType(");
690 base.Writer.Write(", ");
692 base.Writer.WriteLine(");");
693 base.Writer.WriteLine("Writer.WriteString(s);");
694 }
695 else
696 {
697 base.Writer.WriteLine("return s;");
698 }
699 base.Writer.Indent--;
700 base.Writer.WriteLine("}");
701 }
702
704 {
706 {
707 string cSharpName = structMapping.TypeDesc.CSharpName;
708 base.Writer.Write("if (");
709 WriteTypeCompare("t", cSharpName, structMapping.TypeDesc.UseReflection);
710 base.Writer.WriteLine(") {");
711 base.Writer.Indent++;
713 base.Writer.Write(s);
714 base.Writer.Write("(n, ns,");
715 if (!structMapping.TypeDesc.UseReflection)
716 {
717 base.Writer.Write("(" + cSharpName + ")");
718 }
719 base.Writer.Write("o");
720 if (structMapping.TypeDesc.IsNullable)
721 {
722 base.Writer.Write(", isNullable");
723 }
724 base.Writer.Write(", true");
725 base.Writer.WriteLine(");");
726 base.Writer.WriteLine("return;");
727 base.Writer.Indent--;
728 base.Writer.WriteLine("}");
730 }
731 }
732
733 [RequiresUnreferencedCode("calls WriteMember")]
735 {
736 TypeScope[] scopes = base.Scopes;
737 foreach (TypeScope typeScope in scopes)
738 {
739 foreach (Mapping typeMapping in typeScope.TypeMappings)
740 {
742 {
745 base.Writer.Write("if (");
746 WriteTypeCompare("t", cSharpName, enumMapping.TypeDesc.UseReflection);
747 base.Writer.WriteLine(") {");
748 base.Writer.Indent++;
750 base.Writer.WriteLine("Writer.WriteStartElement(n, ns);");
751 base.Writer.Write("WriteXsiType(");
753 base.Writer.Write(", ");
755 base.Writer.WriteLine(");");
756 base.Writer.Write("Writer.WriteString(");
757 base.Writer.Write(s);
758 base.Writer.Write("(");
759 if (!enumMapping.TypeDesc.UseReflection)
760 {
761 base.Writer.Write("(" + cSharpName + ")");
762 }
763 base.Writer.WriteLine("o));");
764 base.Writer.WriteLine("Writer.WriteEndElement();");
765 base.Writer.WriteLine("return;");
766 base.Writer.Indent--;
767 base.Writer.WriteLine("}");
768 }
770 {
771 string cSharpName2 = arrayMapping.TypeDesc.CSharpName;
772 base.Writer.Write("if (");
773 if (arrayMapping.TypeDesc.IsArray)
774 {
775 WriteArrayTypeCompare("t", cSharpName2, arrayMapping.TypeDesc.ArrayElementTypeDesc.CSharpName, arrayMapping.TypeDesc.UseReflection);
776 }
777 else
778 {
779 WriteTypeCompare("t", cSharpName2, arrayMapping.TypeDesc.UseReflection);
780 }
781 base.Writer.WriteLine(") {");
782 base.Writer.Indent++;
783 base.Writer.WriteLine("Writer.WriteStartElement(n, ns);");
784 base.Writer.Write("WriteXsiType(");
786 base.Writer.Write(", ");
788 base.Writer.WriteLine(");");
789 WriteMember("o", null, arrayMapping.ElementsSortedByDerivation, null, null, arrayMapping.TypeDesc, writeAccessors: true);
790 base.Writer.WriteLine("Writer.WriteEndElement();");
791 base.Writer.WriteLine("return;");
792 base.Writer.Indent--;
793 base.Writer.WriteLine("}");
794 }
795 }
796 }
797 }
798
799 [RequiresUnreferencedCode("calls WriteMember")]
801 {
802 if (mapping.IsSoap && mapping.TypeDesc.IsRoot)
803 {
804 return;
805 }
806 string s = (string)base.MethodNames[mapping];
807 base.Writer.WriteLine();
808 base.Writer.Write("void ");
809 base.Writer.Write(s);
810 string cSharpName = mapping.TypeDesc.CSharpName;
811 if (mapping.IsSoap)
812 {
813 base.Writer.WriteLine("(object s) {");
814 base.Writer.Indent++;
815 WriteLocalDecl(cSharpName, "o", "s", mapping.TypeDesc.UseReflection);
816 }
817 else
818 {
819 base.Writer.Write("(string n, string ns, ");
820 base.Writer.Write(mapping.TypeDesc.UseReflection ? "object" : cSharpName);
821 base.Writer.Write(" o");
822 if (mapping.TypeDesc.IsNullable)
823 {
824 base.Writer.Write(", bool isNullable");
825 }
826 base.Writer.WriteLine(", bool needType) {");
827 base.Writer.Indent++;
828 if (mapping.TypeDesc.IsNullable)
829 {
830 base.Writer.WriteLine("if ((object)o == null) {");
831 base.Writer.Indent++;
832 base.Writer.WriteLine("if (isNullable) WriteNullTagLiteral(n, ns);");
833 base.Writer.WriteLine("return;");
834 base.Writer.Indent--;
835 base.Writer.WriteLine("}");
836 }
837 base.Writer.WriteLine("if (!needType) {");
838 base.Writer.Indent++;
839 base.Writer.Write(typeof(Type).FullName);
840 base.Writer.WriteLine(" t = o.GetType();");
841 base.Writer.Write("if (");
842 WriteTypeCompare("t", cSharpName, mapping.TypeDesc.UseReflection);
843 base.Writer.WriteLine(") {");
844 base.Writer.WriteLine("}");
845 base.Writer.WriteLine("else {");
846 base.Writer.Indent++;
848 if (mapping.TypeDesc.IsRoot)
849 {
851 }
852 if (mapping.TypeDesc.IsRoot)
853 {
854 base.Writer.WriteLine("WriteTypedPrimitive(n, ns, o, true);");
855 base.Writer.WriteLine("return;");
856 }
857 else
858 {
859 base.Writer.WriteLine("throw CreateUnknownTypeException(o);");
860 }
861 base.Writer.Indent--;
862 base.Writer.WriteLine("}");
863 base.Writer.Indent--;
864 base.Writer.WriteLine("}");
865 }
866 if (!mapping.TypeDesc.IsAbstract)
867 {
868 if (mapping.TypeDesc.Type != null && typeof(XmlSchemaObject).IsAssignableFrom(mapping.TypeDesc.Type))
869 {
870 base.Writer.WriteLine("EscapeName = false;");
871 }
872 string text = null;
874 int num = FindXmlnsIndex(allMembers);
875 if (num >= 0)
876 {
879 text = base.RaCodeGen.GetStringForMember("o", memberMapping.Name, mapping.TypeDesc);
880 if (mapping.TypeDesc.UseReflection)
881 {
882 text = "((" + memberMapping.TypeDesc.CSharpName + ")" + text + ")";
883 }
884 }
885 if (!mapping.IsSoap)
886 {
887 base.Writer.Write("WriteStartElement(n, ns, o, false, ");
888 if (text == null)
889 {
890 base.Writer.Write("null");
891 }
892 else
893 {
894 base.Writer.Write(text);
895 }
896 base.Writer.WriteLine(");");
897 if (!mapping.TypeDesc.IsRoot)
898 {
899 base.Writer.Write("if (needType) WriteXsiType(");
901 base.Writer.Write(", ");
903 base.Writer.WriteLine(");");
904 }
905 }
906 else if (text != null)
907 {
909 }
911 {
912 if (memberMapping2.Attribute == null)
913 {
914 continue;
915 }
917 if (memberMapping2.CheckShouldPersist)
918 {
919 base.Writer.Write("if (");
920 string text2 = base.RaCodeGen.GetStringForMethodInvoke("o", cSharpName, "ShouldSerialize" + memberMapping2.Name, mapping.TypeDesc.UseReflection);
921 if (mapping.TypeDesc.UseReflection)
922 {
923 text2 = "((" + typeof(bool).FullName + ")" + text2 + ")";
924 }
925 base.Writer.Write(text2);
926 base.Writer.WriteLine(") {");
927 base.Writer.Indent++;
928 }
929 if (memberMapping2.CheckSpecified != 0)
930 {
931 base.Writer.Write("if (");
932 string text3 = base.RaCodeGen.GetStringForMember("o", memberMapping2.Name + "Specified", mapping.TypeDesc);
933 if (mapping.TypeDesc.UseReflection)
934 {
935 text3 = "((" + typeof(bool).FullName + ")" + text3 + ")";
936 }
937 base.Writer.Write(text3);
938 base.Writer.WriteLine(") {");
939 base.Writer.Indent++;
940 }
941 WriteMember(base.RaCodeGen.GetStringForMember("o", memberMapping2.Name, mapping.TypeDesc), memberMapping2.Attribute, memberMapping2.TypeDesc, "o");
942 if (memberMapping2.CheckSpecified != 0)
943 {
944 base.Writer.Indent--;
945 base.Writer.WriteLine("}");
946 }
947 if (memberMapping2.CheckShouldPersist)
948 {
949 base.Writer.Indent--;
950 base.Writer.WriteLine("}");
951 }
952 }
954 {
955 if (memberMapping3.Xmlns != null)
956 {
957 continue;
958 }
961 if (flag)
962 {
963 base.Writer.Write("if (");
964 string text4 = base.RaCodeGen.GetStringForMethodInvoke("o", cSharpName, "ShouldSerialize" + memberMapping3.Name, mapping.TypeDesc.UseReflection);
965 if (mapping.TypeDesc.UseReflection)
966 {
967 text4 = "((" + typeof(bool).FullName + ")" + text4 + ")";
968 }
969 base.Writer.Write(text4);
970 base.Writer.WriteLine(") {");
971 base.Writer.Indent++;
972 }
973 if (memberMapping3.CheckSpecified != 0)
974 {
975 base.Writer.Write("if (");
976 string text5 = base.RaCodeGen.GetStringForMember("o", memberMapping3.Name + "Specified", mapping.TypeDesc);
977 if (mapping.TypeDesc.UseReflection)
978 {
979 text5 = "((" + typeof(bool).FullName + ")" + text5 + ")";
980 }
981 base.Writer.Write(text5);
982 base.Writer.WriteLine(") {");
983 base.Writer.Indent++;
984 }
985 string choiceSource = null;
986 if (memberMapping3.ChoiceIdentifier != null)
987 {
988 CodeIdentifier.CheckValidIdentifier(memberMapping3.ChoiceIdentifier.MemberName);
989 choiceSource = base.RaCodeGen.GetStringForMember("o", memberMapping3.ChoiceIdentifier.MemberName, mapping.TypeDesc);
990 }
991 WriteMember(base.RaCodeGen.GetStringForMember("o", memberMapping3.Name, mapping.TypeDesc), choiceSource, memberMapping3.ElementsSortedByDerivation, memberMapping3.Text, memberMapping3.ChoiceIdentifier, memberMapping3.TypeDesc, writeAccessors: true);
992 if (memberMapping3.CheckSpecified != 0)
993 {
994 base.Writer.Indent--;
995 base.Writer.WriteLine("}");
996 }
997 if (flag)
998 {
999 base.Writer.Indent--;
1000 base.Writer.WriteLine("}");
1001 }
1002 }
1003 if (!mapping.IsSoap)
1004 {
1005 WriteEndElement("o");
1006 }
1007 }
1008 base.Writer.Indent--;
1009 base.Writer.WriteLine("}");
1010 }
1011
1013 {
1014 if (listElementTypeDesc != null)
1015 {
1016 return listElementTypeDesc != base.QnameTypeDesc;
1017 }
1018 return false;
1019 }
1020
1021 [RequiresUnreferencedCode("calls WriteAttribute")]
1023 {
1024 if (memberTypeDesc.IsAbstract)
1025 {
1026 return;
1027 }
1028 if (memberTypeDesc.IsArrayLike)
1029 {
1030 base.Writer.WriteLine("{");
1031 base.Writer.Indent++;
1032 string cSharpName = memberTypeDesc.CSharpName;
1034 if (memberTypeDesc.IsNullable)
1035 {
1036 base.Writer.WriteLine("if (a != null) {");
1037 base.Writer.Indent++;
1038 }
1039 if (attribute.IsList)
1040 {
1041 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1042 {
1043 base.Writer.Write("Writer.WriteStartAttribute(null, ");
1045 base.Writer.Write(", ");
1046 string text = ((attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : string.Empty);
1047 if (text != null)
1048 {
1050 }
1051 else
1052 {
1053 base.Writer.Write("null");
1054 }
1055 base.Writer.WriteLine(");");
1056 }
1057 else
1058 {
1059 base.Writer.Write(typeof(StringBuilder).FullName);
1060 base.Writer.Write(" sb = new ");
1061 base.Writer.Write(typeof(StringBuilder).FullName);
1062 base.Writer.WriteLine("();");
1063 }
1064 }
1066 if (memberTypeDesc.IsEnumerable)
1067 {
1068 base.Writer.Write(" e = ");
1069 base.Writer.Write(typeof(IEnumerator).FullName);
1070 if (memberTypeDesc.IsPrivateImplementation)
1071 {
1072 base.Writer.Write("((");
1073 base.Writer.Write(typeof(IEnumerable).FullName);
1074 base.Writer.WriteLine(").GetEnumerator();");
1075 }
1076 else if (memberTypeDesc.IsGenericInterface)
1077 {
1078 if (memberTypeDesc.UseReflection)
1079 {
1080 base.Writer.Write("(");
1081 base.Writer.Write(typeof(IEnumerator).FullName);
1082 base.Writer.Write(")");
1083 base.Writer.Write(base.RaCodeGen.GetReflectionVariable(memberTypeDesc.CSharpName, "System.Collections.Generic.IEnumerable*"));
1084 base.Writer.WriteLine(".Invoke(a, new object[0]);");
1085 }
1086 else
1087 {
1088 base.Writer.Write("((System.Collections.Generic.IEnumerable<");
1089 base.Writer.Write(arrayElementTypeDesc.CSharpName);
1090 base.Writer.WriteLine(">)a).GetEnumerator();");
1091 }
1092 }
1093 else
1094 {
1095 if (memberTypeDesc.UseReflection)
1096 {
1097 base.Writer.Write("(");
1098 base.Writer.Write(typeof(IEnumerator).FullName);
1099 base.Writer.Write(")");
1100 }
1101 base.Writer.Write(base.RaCodeGen.GetStringForMethodInvoke("a", memberTypeDesc.CSharpName, "GetEnumerator", memberTypeDesc.UseReflection));
1102 base.Writer.WriteLine(";");
1103 }
1104 base.Writer.WriteLine("if (e != null)");
1105 base.Writer.WriteLine("while (e.MoveNext()) {");
1106 base.Writer.Indent++;
1108 WriteLocalDecl(cSharpName2, "ai", "e.Current", arrayElementTypeDesc.UseReflection);
1109 }
1110 else
1111 {
1112 base.Writer.Write("for (int i = 0; i < ");
1113 if (memberTypeDesc.IsArray)
1114 {
1115 base.Writer.WriteLine("a.Length; i++) {");
1116 }
1117 else
1118 {
1119 base.Writer.Write("((");
1120 base.Writer.Write(typeof(ICollection).FullName);
1121 base.Writer.WriteLine(")a).Count; i++) {");
1122 }
1123 base.Writer.Indent++;
1124 string cSharpName3 = arrayElementTypeDesc.CSharpName;
1125 WriteLocalDecl(cSharpName3, "ai", base.RaCodeGen.GetStringForArrayMember("a", "i", memberTypeDesc), arrayElementTypeDesc.UseReflection);
1126 }
1127 if (attribute.IsList)
1128 {
1129 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1130 {
1131 base.Writer.WriteLine("if (i != 0) Writer.WriteString(\" \");");
1132 base.Writer.Write("WriteValue(");
1133 }
1134 else
1135 {
1136 base.Writer.WriteLine("if (i != 0) sb.Append(\" \");");
1137 base.Writer.Write("sb.Append(");
1138 }
1139 if (attribute.Mapping is EnumMapping)
1140 {
1141 WriteEnumValue((EnumMapping)attribute.Mapping, "ai");
1142 }
1143 else
1144 {
1146 }
1147 base.Writer.WriteLine(");");
1148 }
1149 else
1150 {
1151 WriteAttribute("ai", attribute, parent);
1152 }
1153 base.Writer.Indent--;
1154 base.Writer.WriteLine("}");
1155 if (attribute.IsList)
1156 {
1157 if (CanOptimizeWriteListSequence(memberTypeDesc.ArrayElementTypeDesc))
1158 {
1159 base.Writer.WriteLine("Writer.WriteEndAttribute();");
1160 }
1161 else
1162 {
1163 base.Writer.WriteLine("if (sb.Length != 0) {");
1164 base.Writer.Indent++;
1165 base.Writer.Write("WriteAttribute(");
1167 base.Writer.Write(", ");
1168 string text2 = ((attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : string.Empty);
1169 if (text2 != null)
1170 {
1172 base.Writer.Write(", ");
1173 }
1174 base.Writer.WriteLine("sb.ToString());");
1175 base.Writer.Indent--;
1176 base.Writer.WriteLine("}");
1177 }
1178 }
1179 if (memberTypeDesc.IsNullable)
1180 {
1181 base.Writer.Indent--;
1182 base.Writer.WriteLine("}");
1183 }
1184 base.Writer.Indent--;
1185 base.Writer.WriteLine("}");
1186 }
1187 else
1188 {
1190 }
1191 }
1192
1193 [RequiresUnreferencedCode("calls WritePrimitive")]
1194 private void WriteAttribute(string source, AttributeAccessor attribute, string parent)
1195 {
1196 if (attribute.Mapping is SpecialMapping)
1197 {
1199 if (specialMapping.TypeDesc.Kind == TypeKind.Attribute || specialMapping.TypeDesc.CanBeAttributeValue)
1200 {
1201 base.Writer.Write("WriteXmlAttribute(");
1202 base.Writer.Write(source);
1203 base.Writer.Write(", ");
1204 base.Writer.Write(parent);
1205 base.Writer.WriteLine(");");
1206 return;
1207 }
1209 }
1211 if (!typeDesc.UseReflection)
1212 {
1213 source = "((" + typeDesc.CSharpName + ")" + source + ")";
1214 }
1215 WritePrimitive("WriteAttribute", attribute.Name, (attribute.Form == XmlSchemaForm.Qualified) ? attribute.Namespace : "", attribute.Default, source, attribute.Mapping, writeXsiType: false, isElement: false, isNullable: false);
1216 }
1217
1218 [RequiresUnreferencedCode("calls WriteElements")]
1220 {
1221 if (memberTypeDesc.IsArrayLike && (elements.Length != 1 || !(elements[0].Mapping is ArrayMapping)))
1222 {
1224 }
1225 else
1226 {
1228 }
1229 }
1230
1231 [RequiresUnreferencedCode("calls WriteArrayItems")]
1233 {
1234 if (elements.Length != 0 || text != null)
1235 {
1236 base.Writer.WriteLine("{");
1237 base.Writer.Indent++;
1238 string cSharpName = arrayTypeDesc.CSharpName;
1240 if (arrayTypeDesc.IsNullable)
1241 {
1242 base.Writer.WriteLine("if (a != null) {");
1243 base.Writer.Indent++;
1244 }
1245 if (choice != null)
1246 {
1247 string cSharpName2 = choice.Mapping.TypeDesc.CSharpName;
1248 WriteArrayLocalDecl(cSharpName2 + "[]", "c", choiceSource, choice.Mapping.TypeDesc);
1249 base.Writer.WriteLine("if (c == null || c.Length < a.Length) {");
1250 base.Writer.Indent++;
1251 base.Writer.Write("throw CreateInvalidChoiceIdentifierValueException(");
1252 WriteQuotedCSharpString(choice.Mapping.TypeDesc.FullName);
1253 base.Writer.Write(", ");
1254 WriteQuotedCSharpString(choice.MemberName);
1255 base.Writer.Write(");");
1256 base.Writer.Indent--;
1257 base.Writer.WriteLine("}");
1258 }
1259 WriteArrayItems(elements, text, choice, arrayTypeDesc, "a", "c");
1260 if (arrayTypeDesc.IsNullable)
1261 {
1262 base.Writer.Indent--;
1263 base.Writer.WriteLine("}");
1264 }
1265 base.Writer.Indent--;
1266 base.Writer.WriteLine("}");
1267 }
1268 }
1269
1270 [RequiresUnreferencedCode("calls WriteElements")]
1272 {
1274 if (arrayTypeDesc.IsEnumerable)
1275 {
1276 base.Writer.Write(typeof(IEnumerator).FullName);
1277 base.Writer.Write(" e = ");
1278 if (arrayTypeDesc.IsPrivateImplementation)
1279 {
1280 base.Writer.Write("((");
1281 base.Writer.Write(typeof(IEnumerable).FullName);
1282 base.Writer.Write(")");
1283 base.Writer.Write(arrayName);
1284 base.Writer.WriteLine(").GetEnumerator();");
1285 }
1286 else if (arrayTypeDesc.IsGenericInterface)
1287 {
1288 if (arrayTypeDesc.UseReflection)
1289 {
1290 base.Writer.Write("(");
1291 base.Writer.Write(typeof(IEnumerator).FullName);
1292 base.Writer.Write(")");
1293 base.Writer.Write(base.RaCodeGen.GetReflectionVariable(arrayTypeDesc.CSharpName, "System.Collections.Generic.IEnumerable*"));
1294 base.Writer.Write(".Invoke(");
1295 base.Writer.Write(arrayName);
1296 base.Writer.WriteLine(", new object[0]);");
1297 }
1298 else
1299 {
1300 base.Writer.Write("((System.Collections.Generic.IEnumerable<");
1301 base.Writer.Write(arrayElementTypeDesc.CSharpName);
1302 base.Writer.Write(">)");
1303 base.Writer.Write(arrayName);
1304 base.Writer.WriteLine(").GetEnumerator();");
1305 }
1306 }
1307 else
1308 {
1309 if (arrayTypeDesc.UseReflection)
1310 {
1311 base.Writer.Write("(");
1312 base.Writer.Write(typeof(IEnumerator).FullName);
1313 base.Writer.Write(")");
1314 }
1315 base.Writer.Write(base.RaCodeGen.GetStringForMethodInvoke(arrayName, arrayTypeDesc.CSharpName, "GetEnumerator", arrayTypeDesc.UseReflection));
1316 base.Writer.WriteLine(";");
1317 }
1318 base.Writer.WriteLine("if (e != null)");
1319 base.Writer.WriteLine("while (e.MoveNext()) {");
1320 base.Writer.Indent++;
1322 WriteLocalDecl(cSharpName, arrayName + "i", "e.Current", arrayElementTypeDesc.UseReflection);
1323 WriteElements(arrayName + "i", choiceName + "i", elements, text, choice, arrayName + "a", writeAccessors: true, isNullable: true);
1324 }
1325 else
1326 {
1327 base.Writer.Write("for (int i");
1328 base.Writer.Write(arrayName);
1329 base.Writer.Write(" = 0; i");
1330 base.Writer.Write(arrayName);
1331 base.Writer.Write(" < ");
1332 if (arrayTypeDesc.IsArray)
1333 {
1334 base.Writer.Write(arrayName);
1335 base.Writer.Write(".Length");
1336 }
1337 else
1338 {
1339 base.Writer.Write("((");
1340 base.Writer.Write(typeof(ICollection).FullName);
1341 base.Writer.Write(")");
1342 base.Writer.Write(arrayName);
1343 base.Writer.Write(").Count");
1344 }
1345 base.Writer.Write("; i");
1346 base.Writer.Write(arrayName);
1347 base.Writer.WriteLine("++) {");
1348 base.Writer.Indent++;
1349 int num = elements.Length + ((text != null) ? 1 : 0);
1350 if (num > 1)
1351 {
1352 string cSharpName2 = arrayElementTypeDesc.CSharpName;
1353 WriteLocalDecl(cSharpName2, arrayName + "i", base.RaCodeGen.GetStringForArrayMember(arrayName, "i" + arrayName, arrayTypeDesc), arrayElementTypeDesc.UseReflection);
1354 if (choice != null)
1355 {
1356 string cSharpName3 = choice.Mapping.TypeDesc.CSharpName;
1357 WriteLocalDecl(cSharpName3, choiceName + "i", base.RaCodeGen.GetStringForArrayMember(choiceName, "i" + arrayName, choice.Mapping.TypeDesc), choice.Mapping.TypeDesc.UseReflection);
1358 }
1359 WriteElements(arrayName + "i", choiceName + "i", elements, text, choice, arrayName + "a", writeAccessors: true, arrayElementTypeDesc.IsNullable);
1360 }
1361 else
1362 {
1363 WriteElements(base.RaCodeGen.GetStringForArrayMember(arrayName, "i" + arrayName, arrayTypeDesc), elements, text, choice, arrayName + "a", writeAccessors: true, arrayElementTypeDesc.IsNullable);
1364 }
1365 }
1366 base.Writer.Indent--;
1367 base.Writer.WriteLine("}");
1368 }
1369
1370 [RequiresUnreferencedCode("calls WriteElements")]
1375
1376 [RequiresUnreferencedCode("calls WriteElement")]
1378 {
1379 if (elements.Length == 0 && text == null)
1380 {
1381 return;
1382 }
1383 if (elements.Length == 1 && text == null)
1384 {
1385 TypeDesc typeDesc = (elements[0].IsUnbounded ? elements[0].Mapping.TypeDesc.CreateArrayTypeDesc() : elements[0].Mapping.TypeDesc);
1386 if (!elements[0].Any && !elements[0].Mapping.TypeDesc.UseReflection && !elements[0].Mapping.TypeDesc.IsOptionalValue)
1387 {
1388 source = "((" + typeDesc.CSharpName + ")" + source + ")";
1389 }
1391 return;
1392 }
1393 if (isNullable && choice == null)
1394 {
1395 base.Writer.Write("if ((object)(");
1396 base.Writer.Write(source);
1397 base.Writer.Write(") != null)");
1398 }
1399 base.Writer.WriteLine("{");
1400 base.Writer.Indent++;
1401 int num = 0;
1404 bool flag = false;
1406 foreach (ElementAccessor elementAccessor2 in elements)
1407 {
1408 if (elementAccessor2.Any)
1409 {
1410 num++;
1411 if (elementAccessor2.Name != null && elementAccessor2.Name.Length > 0)
1412 {
1414 }
1415 else if (elementAccessor == null)
1416 {
1418 }
1419 }
1420 else if (choice != null)
1421 {
1422 bool useReflection = elementAccessor2.Mapping.TypeDesc.UseReflection;
1423 string cSharpName = elementAccessor2.Mapping.TypeDesc.CSharpName;
1424 bool useReflection2 = choice.Mapping.TypeDesc.UseReflection;
1426 if (flag)
1427 {
1428 base.Writer.Write("else ");
1429 }
1430 else
1431 {
1432 flag = true;
1433 }
1434 base.Writer.Write("if (");
1435 base.Writer.Write(useReflection2 ? base.RaCodeGen.GetStringForEnumLongValue(enumSource, useReflection2) : enumSource);
1436 base.Writer.Write(" == ");
1437 base.Writer.Write(text3);
1438 if (isNullable && !elementAccessor2.IsNullable)
1439 {
1440 base.Writer.Write(" && ((object)(");
1441 base.Writer.Write(source);
1442 base.Writer.Write(") != null)");
1443 }
1444 base.Writer.WriteLine(") {");
1445 base.Writer.Indent++;
1447 string text4 = source;
1448 if (!useReflection)
1449 {
1450 text4 = "((" + cSharpName + ")" + source + ")";
1451 }
1453 base.Writer.Indent--;
1454 base.Writer.WriteLine("}");
1455 }
1456 else
1457 {
1458 bool useReflection3 = elementAccessor2.Mapping.TypeDesc.UseReflection;
1459 TypeDesc typeDesc2 = (elementAccessor2.IsUnbounded ? elementAccessor2.Mapping.TypeDesc.CreateArrayTypeDesc() : elementAccessor2.Mapping.TypeDesc);
1461 if (flag)
1462 {
1463 base.Writer.Write("else ");
1464 }
1465 else
1466 {
1467 flag = true;
1468 }
1469 base.Writer.Write("if (");
1471 base.Writer.WriteLine(") {");
1472 base.Writer.Indent++;
1473 string text5 = source;
1474 if (!useReflection3)
1475 {
1476 text5 = "((" + cSharpName2 + ")" + source + ")";
1477 }
1479 base.Writer.Indent--;
1480 base.Writer.WriteLine("}");
1481 }
1482 }
1483 if (num > 0)
1484 {
1485 if (elements.Length - num > 0)
1486 {
1487 base.Writer.Write("else ");
1488 }
1489 string fullName = typeof(XmlElement).FullName;
1490 base.Writer.Write("if (");
1491 base.Writer.Write(source);
1492 base.Writer.Write(" is ");
1493 base.Writer.Write(fullName);
1494 base.Writer.WriteLine(") {");
1495 base.Writer.Indent++;
1496 base.Writer.Write(fullName);
1497 base.Writer.Write(" elem = (");
1498 base.Writer.Write(fullName);
1499 base.Writer.Write(")");
1500 base.Writer.Write(source);
1501 base.Writer.WriteLine(";");
1502 int num2 = 0;
1503 foreach (ElementAccessor item in arrayList)
1504 {
1505 if (num2++ > 0)
1506 {
1507 base.Writer.Write("else ");
1508 }
1509 string text6 = null;
1510 if (choice != null)
1511 {
1512 bool useReflection4 = choice.Mapping.TypeDesc.UseReflection;
1514 base.Writer.Write("if (");
1515 base.Writer.Write(useReflection4 ? base.RaCodeGen.GetStringForEnumLongValue(enumSource, useReflection4) : enumSource);
1516 base.Writer.Write(" == ");
1517 base.Writer.Write(text6);
1518 if (isNullable && !item.IsNullable)
1519 {
1520 base.Writer.Write(" && ((object)(");
1521 base.Writer.Write(source);
1522 base.Writer.Write(") != null)");
1523 }
1524 base.Writer.WriteLine(") {");
1525 base.Writer.Indent++;
1526 }
1527 base.Writer.Write("if (elem.Name == ");
1529 base.Writer.Write(" && elem.NamespaceURI == ");
1530 WriteQuotedCSharpString(item.Namespace);
1531 base.Writer.WriteLine(") {");
1532 base.Writer.Indent++;
1534 if (choice != null)
1535 {
1536 base.Writer.Indent--;
1537 base.Writer.WriteLine("}");
1538 base.Writer.WriteLine("else {");
1539 base.Writer.Indent++;
1540 base.Writer.WriteLine("// throw Value '{0}' of the choice identifier '{1}' does not match element '{2}' from namespace '{3}'.");
1541 base.Writer.Write("throw CreateChoiceIdentifierValueException(");
1543 base.Writer.Write(", ");
1544 WriteQuotedCSharpString(choice.MemberName);
1545 base.Writer.WriteLine(", elem.Name, elem.NamespaceURI);");
1546 base.Writer.Indent--;
1547 base.Writer.WriteLine("}");
1548 }
1549 base.Writer.Indent--;
1550 base.Writer.WriteLine("}");
1551 }
1552 if (num2 > 0)
1553 {
1554 base.Writer.WriteLine("else {");
1555 base.Writer.Indent++;
1556 }
1557 if (elementAccessor != null)
1558 {
1560 }
1561 else
1562 {
1563 base.Writer.WriteLine("throw CreateUnknownAnyElementException(elem.Name, elem.NamespaceURI);");
1564 }
1565 if (num2 > 0)
1566 {
1567 base.Writer.Indent--;
1568 base.Writer.WriteLine("}");
1569 }
1570 base.Writer.Indent--;
1571 base.Writer.WriteLine("}");
1572 }
1573 if (text != null)
1574 {
1575 bool useReflection5 = text.Mapping.TypeDesc.UseReflection;
1576 string cSharpName3 = text.Mapping.TypeDesc.CSharpName;
1577 if (elements.Length != 0)
1578 {
1579 base.Writer.Write("else ");
1580 base.Writer.Write("if (");
1582 base.Writer.WriteLine(") {");
1583 base.Writer.Indent++;
1584 string source2 = source;
1585 if (!useReflection5)
1586 {
1587 source2 = "((" + cSharpName3 + ")" + source + ")";
1588 }
1590 base.Writer.Indent--;
1591 base.Writer.WriteLine("}");
1592 }
1593 else
1594 {
1595 string source3 = source;
1596 if (!useReflection5)
1597 {
1598 source3 = "((" + cSharpName3 + ")" + source + ")";
1599 }
1601 }
1602 }
1603 if (elements.Length != 0)
1604 {
1605 base.Writer.Write("else ");
1606 if (isNullable)
1607 {
1608 base.Writer.Write(" if ((object)(");
1609 base.Writer.Write(source);
1610 base.Writer.Write(") != null)");
1611 }
1612 base.Writer.WriteLine("{");
1613 base.Writer.Indent++;
1614 base.Writer.Write("throw CreateUnknownTypeException(");
1615 base.Writer.Write(source);
1616 base.Writer.WriteLine(");");
1617 base.Writer.Indent--;
1618 base.Writer.WriteLine("}");
1619 }
1620 base.Writer.Indent--;
1621 base.Writer.WriteLine("}");
1622 }
1623
1624 private void WriteText(string source, TextAccessor text)
1625 {
1626 if (text.Mapping is PrimitiveMapping)
1627 {
1629 base.Writer.Write("WriteValue(");
1630 if (text.Mapping is EnumMapping)
1631 {
1633 }
1634 else
1635 {
1637 }
1638 base.Writer.WriteLine(");");
1639 }
1640 else if (text.Mapping is SpecialMapping)
1641 {
1643 TypeKind kind = specialMapping.TypeDesc.Kind;
1644 if (kind != TypeKind.Node)
1645 {
1647 }
1648 base.Writer.Write(source);
1649 base.Writer.WriteLine(".WriteTo(Writer);");
1650 }
1651 }
1652
1653 [RequiresUnreferencedCode("calls WritePrimitive")]
1654 private void WriteElement(string source, ElementAccessor element, string arrayName, bool writeAccessor)
1655 {
1656 string text = (writeAccessor ? element.Name : element.Mapping.TypeName);
1657 string text2 = ((element.Any && element.Name.Length == 0) ? null : ((element.Form != XmlSchemaForm.Qualified) ? "" : (writeAccessor ? element.Namespace : element.Mapping.Namespace)));
1658 if (element.Mapping is NullableMapping)
1659 {
1660 base.Writer.Write("if (");
1661 base.Writer.Write(source);
1662 base.Writer.WriteLine(" != null) {");
1663 base.Writer.Indent++;
1665 string text3 = source;
1667 {
1668 text3 = "((" + cSharpName + ")" + source + ")";
1669 }
1671 elementAccessor.Mapping = ((NullableMapping)element.Mapping).BaseMapping;
1673 base.Writer.Indent--;
1674 base.Writer.WriteLine("}");
1675 if (element.IsNullable)
1676 {
1677 base.Writer.WriteLine("else {");
1678 base.Writer.Indent++;
1679 WriteLiteralNullTag(element.Name, (element.Form == XmlSchemaForm.Qualified) ? element.Namespace : "");
1680 base.Writer.Indent--;
1681 base.Writer.WriteLine("}");
1682 }
1683 }
1684 else if (element.Mapping is ArrayMapping)
1685 {
1687 if (arrayMapping.IsSoap)
1688 {
1689 base.Writer.Write("WritePotentiallyReferencingElement(");
1691 base.Writer.Write(", ");
1693 base.Writer.Write(", ");
1694 base.Writer.Write(source);
1695 if (!writeAccessor)
1696 {
1697 base.Writer.Write(", ");
1698 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(arrayMapping.TypeDesc.CSharpName, arrayMapping.TypeDesc.UseReflection));
1699 base.Writer.Write(", true, ");
1700 }
1701 else
1702 {
1703 base.Writer.Write(", null, false, ");
1704 }
1705 WriteValue(element.IsNullable);
1706 base.Writer.WriteLine(");");
1707 return;
1708 }
1709 if (element.IsUnbounded)
1710 {
1711 TypeDesc typeDesc = arrayMapping.TypeDesc.CreateArrayTypeDesc();
1712 string cSharpName2 = typeDesc.CSharpName;
1713 string text4 = "el" + arrayName;
1714 string text5 = "c" + text4;
1715 base.Writer.WriteLine("{");
1716 base.Writer.Indent++;
1718 if (element.IsNullable)
1719 {
1720 WriteNullCheckBegin(text4, element);
1721 }
1722 else
1723 {
1724 if (arrayMapping.TypeDesc.IsNullable)
1725 {
1726 base.Writer.Write("if (");
1727 base.Writer.Write(text4);
1728 base.Writer.Write(" != null)");
1729 }
1730 base.Writer.WriteLine("{");
1731 base.Writer.Indent++;
1732 }
1733 base.Writer.Write("for (int ");
1734 base.Writer.Write(text5);
1735 base.Writer.Write(" = 0; ");
1736 base.Writer.Write(text5);
1737 base.Writer.Write(" < ");
1738 if (typeDesc.IsArray)
1739 {
1740 base.Writer.Write(text4);
1741 base.Writer.Write(".Length");
1742 }
1743 else
1744 {
1745 base.Writer.Write("((");
1746 base.Writer.Write(typeof(ICollection).FullName);
1747 base.Writer.Write(")");
1748 base.Writer.Write(text4);
1749 base.Writer.Write(").Count");
1750 }
1751 base.Writer.Write("; ");
1752 base.Writer.Write(text5);
1753 base.Writer.WriteLine("++) {");
1754 base.Writer.Indent++;
1755 element.IsUnbounded = false;
1756 WriteElement(text4 + "[" + text5 + "]", element, arrayName, writeAccessor);
1757 element.IsUnbounded = true;
1758 base.Writer.Indent--;
1759 base.Writer.WriteLine("}");
1760 base.Writer.Indent--;
1761 base.Writer.WriteLine("}");
1762 base.Writer.Indent--;
1763 base.Writer.WriteLine("}");
1764 return;
1765 }
1766 string cSharpName3 = arrayMapping.TypeDesc.CSharpName;
1767 base.Writer.WriteLine("{");
1768 base.Writer.Indent++;
1770 if (element.IsNullable)
1771 {
1773 }
1774 else
1775 {
1776 if (arrayMapping.TypeDesc.IsNullable)
1777 {
1778 base.Writer.Write("if (");
1779 base.Writer.Write(arrayName);
1780 base.Writer.Write(" != null)");
1781 }
1782 base.Writer.WriteLine("{");
1783 base.Writer.Indent++;
1784 }
1786 WriteArrayItems(arrayMapping.ElementsSortedByDerivation, null, null, arrayMapping.TypeDesc, arrayName, null);
1788 base.Writer.Indent--;
1789 base.Writer.WriteLine("}");
1790 base.Writer.Indent--;
1791 base.Writer.WriteLine("}");
1792 }
1793 else if (element.Mapping is EnumMapping)
1794 {
1795 if (element.Mapping.IsSoap)
1796 {
1797 string s = (string)base.MethodNames[element.Mapping];
1798 base.Writer.Write("Writer.WriteStartElement(");
1800 base.Writer.Write(", ");
1802 base.Writer.WriteLine(");");
1803 base.Writer.Write(s);
1804 base.Writer.Write("(");
1805 base.Writer.Write(source);
1806 base.Writer.WriteLine(");");
1808 }
1809 else
1810 {
1811 WritePrimitive("WriteElementString", text, text2, element.Default, source, element.Mapping, writeXsiType: false, isElement: true, element.IsNullable);
1812 }
1813 }
1814 else if (element.Mapping is PrimitiveMapping)
1815 {
1817 if (primitiveMapping.TypeDesc == base.QnameTypeDesc)
1818 {
1820 return;
1821 }
1822 string text6 = (primitiveMapping.IsSoap ? "Encoded" : "Literal");
1824 WritePrimitive(element.IsNullable ? ("WriteNullableString" + text6 + text7) : ("WriteElementString" + text7), text, text2, element.Default, source, primitiveMapping, primitiveMapping.IsSoap, isElement: true, element.IsNullable);
1825 }
1826 else if (element.Mapping is StructMapping)
1827 {
1829 if (structMapping.IsSoap)
1830 {
1831 base.Writer.Write("WritePotentiallyReferencingElement(");
1833 base.Writer.Write(", ");
1835 base.Writer.Write(", ");
1836 base.Writer.Write(source);
1837 if (!writeAccessor)
1838 {
1839 base.Writer.Write(", ");
1840 base.Writer.Write(base.RaCodeGen.GetStringForTypeof(structMapping.TypeDesc.CSharpName, structMapping.TypeDesc.UseReflection));
1841 base.Writer.Write(", true, ");
1842 }
1843 else
1844 {
1845 base.Writer.Write(", null, false, ");
1846 }
1847 WriteValue(element.IsNullable);
1848 }
1849 else
1850 {
1852 base.Writer.Write(s2);
1853 base.Writer.Write("(");
1855 base.Writer.Write(", ");
1856 if (text2 == null)
1857 {
1858 base.Writer.Write("null");
1859 }
1860 else
1861 {
1863 }
1864 base.Writer.Write(", ");
1865 base.Writer.Write(source);
1866 if (structMapping.TypeDesc.IsNullable)
1867 {
1868 base.Writer.Write(", ");
1869 WriteValue(element.IsNullable);
1870 }
1871 base.Writer.Write(", false");
1872 }
1873 base.Writer.WriteLine(");");
1874 }
1875 else
1876 {
1877 if (!(element.Mapping is SpecialMapping))
1878 {
1880 }
1881 if (element.Mapping is SerializableMapping)
1882 {
1883 WriteElementCall("WriteSerializable", typeof(IXmlSerializable), source, text, text2, element.IsNullable, !element.Any);
1884 return;
1885 }
1886 base.Writer.Write("if ((");
1887 base.Writer.Write(source);
1888 base.Writer.Write(") is ");
1889 base.Writer.Write(typeof(XmlNode).FullName);
1890 base.Writer.Write(" || ");
1891 base.Writer.Write(source);
1892 base.Writer.Write(" == null");
1893 base.Writer.WriteLine(") {");
1894 base.Writer.Indent++;
1895 WriteElementCall("WriteElementLiteral", typeof(XmlNode), source, text, text2, element.IsNullable, element.Any);
1896 base.Writer.Indent--;
1897 base.Writer.WriteLine("}");
1898 base.Writer.WriteLine("else {");
1899 base.Writer.Indent++;
1900 base.Writer.Write("throw CreateInvalidAnyTypeException(");
1901 base.Writer.Write(source);
1902 base.Writer.WriteLine(");");
1903 base.Writer.Indent--;
1904 base.Writer.WriteLine("}");
1905 }
1906 }
1907
1908 private void WriteElementCall(string func, Type cast, string source, string name, string ns, bool isNullable, bool isAny)
1909 {
1910 base.Writer.Write(func);
1911 base.Writer.Write("((");
1912 base.Writer.Write(cast.FullName);
1913 base.Writer.Write(")");
1914 base.Writer.Write(source);
1915 base.Writer.Write(", ");
1917 base.Writer.Write(", ");
1919 base.Writer.Write(", ");
1921 base.Writer.Write(", ");
1923 base.Writer.WriteLine(");");
1924 }
1925
1926 [RequiresUnreferencedCode("calls GetType")]
1927 private void WriteCheckDefault(TypeMapping mapping, string source, object value, bool isNullable)
1928 {
1929 base.Writer.Write("if (");
1930 if (value is string && ((string)value).Length == 0)
1931 {
1932 base.Writer.Write("(");
1933 base.Writer.Write(source);
1934 if (isNullable)
1935 {
1936 base.Writer.Write(" == null) || (");
1937 }
1938 else
1939 {
1940 base.Writer.Write(" != null) && (");
1941 }
1942 base.Writer.Write(source);
1943 base.Writer.Write(".Length != 0)");
1944 }
1945 else if (value is double || value is float)
1946 {
1947 base.Writer.Write("!");
1948 base.Writer.Write(source);
1949 base.Writer.Write(".Equals(");
1950 Type type = Type.GetType(mapping.TypeDesc.Type.FullName);
1951 WriteValue((type != null) ? Convert.ChangeType(value, type) : value);
1952 base.Writer.Write(")");
1953 }
1954 else
1955 {
1956 base.Writer.Write(source);
1957 base.Writer.Write(" != ");
1958 Type type2 = Type.GetType(mapping.TypeDesc.Type.FullName);
1960 }
1961 base.Writer.Write(")");
1962 }
1963
1965 {
1966 base.Writer.Write("if (((object)");
1967 base.Writer.Write(source);
1968 base.Writer.Write(") != null && !(");
1970 base.Writer.Write(")) throw CreateMismatchChoiceException(");
1972 base.Writer.Write(", ");
1973 WriteQuotedCSharpString(choice.MemberName);
1974 base.Writer.Write(", ");
1976 base.Writer.WriteLine(");");
1977 }
1978
1979 private void WriteNullCheckBegin(string source, ElementAccessor element)
1980 {
1981 base.Writer.Write("if ((object)(");
1982 base.Writer.Write(source);
1983 base.Writer.WriteLine(") == null) {");
1984 base.Writer.Indent++;
1985 WriteLiteralNullTag(element.Name, (element.Form == XmlSchemaForm.Qualified) ? element.Namespace : "");
1986 base.Writer.Indent--;
1987 base.Writer.WriteLine("}");
1988 base.Writer.WriteLine("else {");
1989 base.Writer.Indent++;
1990 }
1991
1992 private void WriteValue(object value)
1993 {
1994 if (value == null)
1995 {
1996 base.Writer.Write("null");
1997 return;
1998 }
1999 Type type = value.GetType();
2000 if (type == typeof(string))
2001 {
2002 string value2 = (string)value;
2004 }
2005 else if (type == typeof(char))
2006 {
2007 base.Writer.Write('\'');
2008 char c = (char)value;
2009 if (c == '\'')
2010 {
2011 base.Writer.Write("'");
2012 }
2013 else
2014 {
2015 base.Writer.Write(c);
2016 }
2017 base.Writer.Write('\'');
2018 }
2019 else if (type == typeof(int))
2020 {
2021 base.Writer.Write(((int)value).ToString(null, NumberFormatInfo.InvariantInfo));
2022 }
2023 else if (type == typeof(double))
2024 {
2025 if (double.IsNaN((double)value))
2026 {
2027 base.Writer.Write("System.Double.NaN");
2028 }
2029 else if (double.IsPositiveInfinity((double)value))
2030 {
2031 base.Writer.Write("System.Double.PositiveInfinity");
2032 }
2033 else if (double.IsNegativeInfinity((double)value))
2034 {
2035 base.Writer.Write("System.Double.NegativeInfinity");
2036 }
2037 else
2038 {
2039 base.Writer.Write(((double)value).ToString("R", NumberFormatInfo.InvariantInfo));
2040 }
2041 }
2042 else if (type == typeof(bool))
2043 {
2044 base.Writer.Write(((bool)value) ? "true" : "false");
2045 }
2046 else if (type == typeof(short) || type == typeof(long) || type == typeof(ushort) || type == typeof(uint) || type == typeof(ulong) || type == typeof(byte) || type == typeof(sbyte))
2047 {
2048 base.Writer.Write("(");
2049 base.Writer.Write(type.FullName);
2050 base.Writer.Write(")");
2051 base.Writer.Write("(");
2053 base.Writer.Write(")");
2054 }
2055 else if (type == typeof(float))
2056 {
2057 if (float.IsNaN((float)value))
2058 {
2059 base.Writer.Write("System.Single.NaN");
2060 return;
2061 }
2062 if (float.IsPositiveInfinity((float)value))
2063 {
2064 base.Writer.Write("System.Single.PositiveInfinity");
2065 return;
2066 }
2067 if (float.IsNegativeInfinity((float)value))
2068 {
2069 base.Writer.Write("System.Single.NegativeInfinity");
2070 return;
2071 }
2072 base.Writer.Write(((float)value).ToString("R", NumberFormatInfo.InvariantInfo));
2073 base.Writer.Write("f");
2074 }
2075 else if (type == typeof(decimal))
2076 {
2077 base.Writer.Write(((decimal)value).ToString(null, NumberFormatInfo.InvariantInfo));
2078 base.Writer.Write("m");
2079 }
2080 else if (type == typeof(DateTime))
2081 {
2082 base.Writer.Write(" new ");
2083 base.Writer.Write(type.FullName);
2084 base.Writer.Write("(");
2085 base.Writer.Write(((DateTime)value).Ticks.ToString(CultureInfo.InvariantCulture));
2086 base.Writer.Write(")");
2087 }
2088 else if (type == typeof(DateTimeOffset))
2089 {
2090 base.Writer.Write(" new ");
2091 base.Writer.Write(type.FullName);
2092 base.Writer.Write("(");
2093 base.Writer.Write(((DateTimeOffset)value).Ticks.ToString(CultureInfo.InvariantCulture));
2094 base.Writer.Write(", new ");
2095 base.Writer.Write(((DateTimeOffset)value).Offset.GetType().FullName);
2096 base.Writer.Write("(");
2097 base.Writer.Write(((DateTimeOffset)value).Offset.Ticks.ToString(CultureInfo.InvariantCulture));
2098 base.Writer.Write("))");
2099 }
2100 else if (type == typeof(TimeSpan))
2101 {
2102 base.Writer.Write(" new ");
2103 base.Writer.Write(type.FullName);
2104 base.Writer.Write("(");
2105 base.Writer.Write(((TimeSpan)value).Ticks.ToString(CultureInfo.InvariantCulture));
2106 base.Writer.Write(")");
2107 }
2108 else
2109 {
2110 if (!type.IsEnum)
2111 {
2113 }
2114 base.Writer.Write(((int)value).ToString(null, NumberFormatInfo.InvariantInfo));
2115 }
2116 }
2117
2118 private void WriteNamespaces(string source)
2119 {
2120 base.Writer.Write("WriteNamespaceDeclarations(");
2121 base.Writer.Write(source);
2122 base.Writer.WriteLine(");");
2123 }
2124
2126 {
2127 for (int i = 0; i < members.Length; i++)
2128 {
2129 if (members[i].Xmlns != null)
2130 {
2131 return i;
2132 }
2133 }
2134 return -1;
2135 }
2136
2138 {
2139 base.Writer.Write("for (int i = ");
2140 base.Writer.Write(loopStartSource);
2141 base.Writer.Write("; i < ");
2142 base.Writer.Write(loopEndSource);
2143 base.Writer.WriteLine("; i++) {");
2144 base.Writer.Indent++;
2145 base.Writer.WriteLine("if (p[i] != null) {");
2146 base.Writer.Indent++;
2147 base.Writer.WriteLine("WritePotentiallyReferencingElement(null, null, p[i], p[i].GetType(), true, false);");
2148 base.Writer.Indent--;
2149 base.Writer.WriteLine("}");
2150 base.Writer.Indent--;
2151 base.Writer.WriteLine("}");
2152 }
2153
2154 private void WriteLocalDecl(string typeName, string variableName, string initValue, bool useReflection)
2155 {
2156 base.RaCodeGen.WriteLocalDecl(typeName, variableName, initValue, useReflection);
2157 }
2158
2159 private void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
2160 {
2161 base.RaCodeGen.WriteArrayLocalDecl(typeName, variableName, initValue, arrayTypeDesc);
2162 }
2163
2164 private void WriteTypeCompare(string variable, string escapedTypeName, bool useReflection)
2165 {
2166 base.RaCodeGen.WriteTypeCompare(variable, escapedTypeName, useReflection);
2167 }
2168
2169 private void WriteInstanceOf(string source, string escapedTypeName, bool useReflection)
2170 {
2171 base.RaCodeGen.WriteInstanceOf(source, escapedTypeName, useReflection);
2172 }
2173
2175 {
2176 base.RaCodeGen.WriteArrayTypeCompare(variable, escapedTypeName, elementTypeName, useReflection);
2177 }
2178
2180 {
2181 base.RaCodeGen.WriteEnumCase(fullTypeName, c, useReflection);
2182 }
2183
2185 {
2186 string text = null;
2187 for (int i = 0; i < choiceMapping.Constants.Length; i++)
2188 {
2189 string xmlName = choiceMapping.Constants[i].XmlName;
2190 if (element.Any && element.Name.Length == 0)
2191 {
2192 if (xmlName == "##any:")
2193 {
2194 text = ((!useReflection) ? choiceMapping.Constants[i].Name : choiceMapping.Constants[i].Value.ToString(CultureInfo.InvariantCulture));
2195 break;
2196 }
2197 continue;
2198 }
2199 int num = xmlName.LastIndexOf(':');
2200 ReadOnlySpan<char> span = ((num < 0) ? ((ReadOnlySpan<char>)choiceMapping.Namespace) : xmlName.AsSpan(0, num));
2201 ReadOnlySpan<char> span2 = ((num < 0) ? ((ReadOnlySpan<char>)xmlName) : xmlName.AsSpan(num + 1));
2202 if (span2.SequenceEqual(element.Name) && ((element.Form == XmlSchemaForm.Unqualified && span.IsEmpty) || span.SequenceEqual(element.Namespace)))
2203 {
2204 text = ((!useReflection) ? choiceMapping.Constants[i].Name : choiceMapping.Constants[i].Value.ToString(CultureInfo.InvariantCulture));
2205 break;
2206 }
2207 }
2208 if (text == null || text.Length == 0)
2209 {
2210 if (element.Any && element.Name.Length == 0)
2211 {
2213 }
2214 throw new InvalidOperationException(System.SR.Format(System.SR.XmlChoiceMissingValue, choiceMapping.TypeDesc.FullName, element.Namespace + ":" + element.Name, element.Name, element.Namespace));
2215 }
2216 if (!useReflection)
2217 {
2219 }
2220 return text;
2221 }
2222}
static ? string ToString(object? value)
Definition Convert.cs:2321
static ? object ChangeType(object? value, TypeCode typeCode)
Definition Convert.cs:229
static readonly DBNull Value
Definition DBNull.cs:8
static CultureInfo InvariantCulture
static string XmlInternalError
Definition SR.cs:1812
static string XmlChoiceMissingAnyValue
Definition SR.cs:1656
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlUnsupportedDefaultType
Definition SR.cs:1516
static string XmlChoiceMissingValue
Definition SR.cs:1654
Definition SR.cs:7
static ? Type GetType(string typeName, bool throwOnError, bool ignoreCase)
Definition Type.cs:408
static void CheckValidIdentifier([NotNull] string ident)
static string MakeValidInternal(string identifier)
TypeDesc(string name, string fullName, XmlSchemaType dataType, TypeKind kind, TypeDesc baseTypeDesc, TypeFlags flags, string formatterName)
Definition TypeDesc.cs:219
static MemberMapping[] GetAllMembers(StructMapping mapping)
Definition TypeScope.cs:598
void WriteElements(string source, string enumSource, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, string arrayName, bool writeAccessors, bool isNullable)
void WriteInstanceOf(string source, string escapedTypeName, bool useReflection)
void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc)
void WritePrimitiveValue(TypeDesc typeDesc, string source, bool isElement)
void WriteMember(string source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent)
void WriteTypeCompare(string variable, string escapedTypeName, bool useReflection)
void WriteEnumCase(string fullTypeName, ConstantMapping c, bool useReflection)
XmlSerializationWriterCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className)
void WriteNullCheckBegin(string source, ElementAccessor element)
void WriteArrayItems(ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc arrayTypeDesc, string arrayName, string choiceName)
void WriteQualifiedNameElement(string name, string ns, object defaultValue, string source, bool nullable, bool IsSoap, TypeMapping mapping)
void WriteLocalDecl(string typeName, string variableName, string initValue, bool useReflection)
void WriteAttribute(string source, AttributeAccessor attribute, string parent)
string GenerateMembersElement(XmlMembersMapping xmlMembersMapping)
void WriteElementCall(string func, Type cast, string source, string name, string ns, bool isNullable, bool isAny)
void WriteArray(string source, string choiceSource, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc arrayTypeDesc)
void WriteCheckDefault(TypeMapping mapping, string source, object value, bool isNullable)
void WriteElements(string source, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, string arrayName, bool writeAccessors, bool isNullable)
void WriteElement(string source, ElementAccessor element, string arrayName, bool writeAccessor)
void WritePrimitive(string method, string name, string ns, object defaultValue, string source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)
void WriteStartElement(string name, string ns, bool writePrefixed)
void WriteChoiceTypeCheck(string source, string fullTypeName, bool useReflection, ChoiceIdentifierAccessor choice, string enumName, TypeDesc typeDesc)
void WriteMember(string source, string choiceSource, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc memberTypeDesc, bool writeAccessors)
void WriteArrayTypeCompare(string variable, string escapedTypeName, string elementTypeName, bool useReflection)
void WriteTag(string methodName, string name, string ns, bool writePrefixed)
string FindChoiceEnumValue(ElementAccessor element, EnumMapping choiceMapping, bool useReflection)
void WriteExtraMembers(string loopStartSource, string loopEndSource)
void WriteTag(string methodName, string name, string ns)