Xml 序列化基础 class 属性

Xml serialization Base class attributes

我正在使用 XmlSerializer class 序列化 Derived class "MyContext",它继承了基础 Class "BaseClass"。基本 class 属性 "attr1"、"attr2" 不存在于序列化 XML output.I 中需要这些属性在上下文 class 和嵌套 class 在上下文 class 中。请帮助这里缺少什么。

namespace MyConsoleApplication
{
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MyContextType))]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    public partial class BaseType
    {
     private MyEnumType attr1Field;
     private MyEnumType attr2Field;

     [System.Xml.Serialization.XmlAttributeAttribute()]
     public MyEnumType Attr1
        {
            get
            {
                return this.attr1Field;
            }
            set
            {
                this.attr1Field= value;
            }
        }

     [System.Xml.Serialization.XmlAttributeAttribute()]    
     public MyEnumType Attr2
        {
            get
            {
                return this.attr2Field;
            }
            set
            {
                this.attr2Field= value;
            }
        }
    }


     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
     [System.SerializableAttribute()]
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.ComponentModel.DesignerCategoryAttribute("code")]
     [System.Xml.Serialization.XmlRootAttribute("Context", Namespace = "", IsNullable = false)]
     public partial class MyContextType : BaseType
     {
         private string element1Field;

         private string element2Field;

         [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
         public string Element1
         {
             get
             {
                 return this.element1Field;
             }
             set
             {
                 this.element1Field = value;
             }
         }
         [System.Xml.Serialization.XmlElementAttribute(Order = 1)]
         public string Element2
         {
             get
             {
                 return this.element2Field;
             }
             set
             {
                 this.element2Field = value;
             }
         }
     }

     public enum MyEnumType
     {

         /// <remarks/>
         False,

         /// <remarks/>
         True,
     }
}

我的序列化程序代码:

var mydoc = new XmlDocument();
var context = new MyContextType() { Element1 = "Car", Element2 = "Bike", Attr1 = "id1", Attr2 = "id2" };  

using (MemoryStream stream = new MemoryStream())
    {
        XmlSerializer s = new XmlSerializer(typeof(MyContextType));
        s.Serialize(XmlWriter.Create(stream), context);
        stream.Flush();
        stream.Seek(0, SeekOrigin.Begin);
        mydoc.Load(stream);
    }

输出Xml:

<MyContext>
    <Element1>Happy</Element1>
    <Element2>10</Element2>
</MyContext>

但我希望输出为

<MyContext attr1 = "False" attr2="False">
        <Element1>Happy</Element1>
        <Element2>10</Element2>
</MyContext>

解决方案是将 "Attr1Specified" 值指定为 true。这是答案。

 var context = new MyContextType() { Element1 = "Car", Element2 = "Bike", Attr1 = MyEnumType.False, Attr1Specified = true, Attr2 = MyEnumType.False, Attr2Specified = true };