2011-03-14 188 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> - 序列化器无法处理这个问题。