使用具有多个类的类序列化为xml

时间:2015-09-23 20:36:27

标签: c# xml

我正在使用asp.net和C#来使用类序列化一些输入的数据。此类是从xsd文件生成的。我正在使用此类生成一个xml文件。我很难理解如何引用所有这些类并将其序列化为一个xml文件。

这是我的班级代码。它位于我的项目中的单独文件中:

 namespace Ce
{
    using System.Xml.Serialization;

// 
// This source code was auto-generated by xsd, Version=4.0.30319.33440.
// 



public partial class AddRequest
{

    private CDocument cDocumentField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Namespace = "x")]
    public CDocument CDocument
    {
        get
        {
            return this.cDocumentField;
        }
        set
        {
            this.cDocumentField = value;
        }
    }
}


public partial class CDocument
{

    private CaseA caseAField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Namespace = "x")]
    public CaseA CaseA
    {
        get
        {
            return this.caseAField;
        }
        set
        {
            this.caseAField = value;
        }
    }
}


public partial class CaseA
{

    public string dCTextField;

    private string dLField;



    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Namespace = "x")]
    public string DCText
    {
        get
        {
            return this.dCTextField;
        }
        set
        {
            this.dCTextField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Namespace = "x")]
    public string DLU
    {
        get
        {
            return this.dLField;
        }
        set
        {
            this.dLField = value;
        }
    }

}
}

要序列化我在我的代码隐藏中点按了一个按钮点击事件:

 protected void CaseSubmitButton_Click(object sender, EventArgs e)
    {

CaseA CSerialize = new CaseA();
    CSerialize.DCText = casetextboxt.text;
    CSerialize.DLu = "\\app";

    XmlSerializer Serializer = new XmlSerializer(typeof(CaseA));
    StreamWriter Writer = new StreamWriter(Server.MapPath("~/XmlPackages/" + xmlPackageFilename));
    Serializer.Serialize(Writer, CSerialize);
    Serializer.Serialize(Writer, CSerialize); 

}

使用此按钮单击事件,我得到此xml格式:

<?xml version="1.0" encoding="utf-8"?>
<CaseA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <DCText>\apptest</DCText>
    <DLU>\apptest</DLU>

</CaseA>

我想引用其他两个类来获取:

    <?xml version="1.0" encoding="utf-8"?>
<Addrequest>
 <Cdocument>
   <CaseA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <DCText>\apptest</DCText>
    <DLU>\apptest</DLU>

   </CaseA>
  </Cdocument>
</Addrequest>

1 个答案:

答案 0 :(得分:0)

您正在序列化CaseA类的实例,这就是为什么您只在输出中看到CaseA的成员。您需要创建AddRequest的实例并将其序列化为根,如下所示:

CaseA cSerialize = new CaseA();
cSerialize .DCText = casetextboxt.text;
cSerialize .DLu = "\\app";

CDocument document = new CDocument();
document.CaseA = cSerialize ;

AddRequest root = new AddRequest();
root.CDocument = document;

XmlSerializer serializer = new XmlSerializer(typeof(AddRequest), new Type[] { typeof(CDocument), typeof(CaseA) });
StreamWriter writer = new StreamWriter(Server.MapPath("~/XmlPackages/" + xmlPackageFilename));
serializer.Serialize(writer, root);

作为旁注,请遵循C#编码标准来命名您的本地变量:)