2011-03-14 285 views
1

我需要將對象轉換爲xml,並已經通過幾篇文章來做到這一點。但是,我收到錯誤「生成xml文檔時出錯,請確保源類型與目標類型相同」。將對象轉換爲xml

下面是我的代碼

namespace XYZ { 
    [Serializable] 
[XmlRoot("details")]  
public class Details 
{ 
    private string code; 

    [XmlAttribute ("code")] 
    public string Code 
    { 
     get { return code; } 
     set { code= value; } 
    } 

    private string mcode; 

    [XmlAttribute("mcode")] 
    public string MCode 
    { 
     get { return mcode; } 
     set { mcode= value; } 
    }  
    } 
} 

和其他類文件粘貼下面

namespace ABC 
{ 
[Serializable] 
[XmlRoot("BillDetails")] 
public class BillDetails 
{ 
    private string cat; 

    [XmlAttribute("Cat")] 
    public string Cat 
    { 
     get { return cat; } 
     set { cat= value; } 
    } 

    private string customername; 

    [XmlAttribute("CustomerName")] 
    public string CustomerName 
    { 
     get { return customername; } 
     set { customername = value; } 
    } 

    private List<Details> details; 

    [XmlArray("Details")] 
    [XmlArrayItem("details")] 
    // public List<Details> details = new List<Details>(); 
    public List<Details> Details 
    { 
     get { return details; } 
     set { details = value; } 
    } 
} 
} 

下面是我在哪裏得到的錯誤

List<BillDetails> billlist = new List<BillDetails>();  
    public int x;  
    List<Details> newdetails = new List<Details>();  

public void Button1_Click(object sender, EventArgs e) 
    { 
     if (Session["x"] == null) 
      { 
       newdetails.Add(new Details() { Code = Code.Text, MCode = MCode.Text}); 
       billlist.Add(new BillDetails() { Cat = Cat.Text, Details = newdetails.ToList(), CustomerName = CustomerName.Text }); 
       //Code to bindGrid      
       Session["x"] = newdetails; 
       serializetoxml(billlist); 

      } 

    private void serializetoxml(List<BillDetails> billlist) 
    { 
     XmlSerializer myserializer = new XmlSerializer(typeof(BillDetails)); 
     TextWriter mywriter = new StreamWriter("C:\\billlist.xml"); 
     myserializer.Serialize(mywriter, billlist);--- Error is thrown here 
     mywriter.Close(); 
    } 

請幫忙代碼糾正我。

回答

3

突出給我的錯誤是,當它實際上是一個BillDetails列表時,您告訴XmlSerializer它的類型是BillDetails。

+0

非常感謝你,讓代碼運行。完全錯過了! :) – Janet 2011-03-14 19:14:30

6

這個錯誤是因爲billlist不是BillDetails類型,但List<BillDetails>

你可以嘗試

XmlSerializer myserializer = new XmlSerializer(typeof(List<BillDetails>)); 
+0

如何添加投票到您的答案..新的到stackoverflow – Janet 2011-03-23 16:41:29

+0

我認爲你需要至少50代表投票。 – 2011-03-23 16:49:24

1

你有沒有試着用List<BillDetails>類型構建您的串行器(你會序列化,你爲什麼把簡單BillDetails到構造函數):

XmlSerializer myserializer = new XmlSerializer(typeof(List<BillDetails>)); 
+0

非常感謝你,讓代碼運行。完全錯過了! :) – Janet 2011-03-14 19:14:58

1
XmlSerializer myserializer = new XmlSerializer(typeof(BillDetails)); 

你正在構造一個類型爲BillDetails的序列化器,但隨後傳遞給它一個List<BillDetails> - 序列化器無法處理這個問題。