2015-09-23 25 views
0

我正在使用asp.net和C#来使用类序列化一些输入的数据。这个类是从一个xsd文件生成的。我正在使用这个类来生成一个xml文件。我正在努力了解如何引用所有这些类并将其序列化为一个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> 
+0

如果串行需要帮助与未知的类,你可以帮助它与另一个构造函数:) https://msdn.microsoft.com/en-us/library/e5aakyae(v=vs.110).aspx – Spawn

回答

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#编码标准命名的局部变量:)