2614 {
2616 {
2618 base.Writer.WriteLine(
" = true;");
2619 }
2620 if (element.Mapping
is ArrayMapping)
2621 {
2623 }
2624 else if (element.Mapping
is NullableMapping)
2625 {
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 {
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++;
2668 if (element.Mapping.TypeDesc.Type ==
typeof(
TimeSpan) || element.Mapping.TypeDesc.Type ==
typeof(DateTimeOffset))
2669 {
2670 base.Writer.WriteLine(
"if (Reader.IsEmptyElement) {");
2671 base.Writer.Indent++;
2672 base.Writer.WriteLine(
"Reader.Skip();");
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++;
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 {
2704 string formatterName = element.Mapping.TypeDesc.FormatterName;
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;
2717 {
2718 base.Writer.Write(
"object rre = ");
2719 base.Writer.Write((
fixupIndex >= 0) ?
"ReadReferencingElement" :
"ReadReferencedElement");
2720 base.Writer.Write(
"(");
2722 base.Writer.Write(
", ");
2725 {
2726 base.Writer.Write(
", out fixup.Ids[");
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(
";");
2745 base.Writer.Write(
"Referenced(");
2747 base.Writer.WriteLine(
");");
2748 if (
mapping.TypeDesc.IsValueType)
2749 {
2750 base.Writer.Indent--;
2751 base.Writer.WriteLine(
"}");
2752 }
2753 }
2754 else
2755 {
2758 {
2759 base.Writer.Write(
"if ((object)(");
2761 base.Writer.Write(
") == null) Reader.Skip(); else ");
2762 }
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 }
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 {
2801 {
2803 base.Writer.WriteLine(
" tser = GetXsiType();");
2804 base.Writer.Write(
"if (tser == null");
2805 base.Writer.Write(
" || ");
2807 base.Writer.WriteLine(
") {");
2808 base.Writer.Indent++;
2809 }
2811 base.Writer.Write(
"ReadSerializable(( ");
2813 base.Writer.Write(
")");
2816 if (flag)
2817 {
2818 base.Writer.WriteLine(
", true");
2819 }
2820 base.Writer.Write(
")");
2822 base.Writer.WriteLine(
";");
2824 {
2825 base.Writer.Indent--;
2826 base.Writer.WriteLine(
"}");
2829 }
2830 break;
2831 }
2832 default:
2834 }
2835 }
2837 {
2840 base.Writer.Write(
" = ");
2843 base.Writer.WriteLine(
";");
2844 }
2845 }
static CultureInfo InvariantCulture
static string XmlInternalError
string ReferenceMapping(TypeMapping mapping)
XmlSerializationCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className)
void WriteSourceBegin(string source)
void WriteBooleanValue(bool value)
void WriteSourceBeginTyped(string source, TypeDesc typeDesc)
void WriteQNameEqual(string source, string name, string ns)
void WriteCatchCastException(TypeDesc typeDesc, string source, string id)
void WritePrimitive(TypeMapping mapping, string source)
void WriteID(string name)
void WriteSourceEnd(string source)
void WriteArray(string source, string arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex)
void WriteDerivedSerializable(SerializableMapping head, SerializableMapping mapping, string source, bool isWrappedAny)
void WriteUnknownNode(string func, string node, ElementAccessor e, bool anyIfs)
@ InvalidOperationException