c#XML序列化

时间:2012-02-09 10:49:34

标签: c# .net xml serialization

我有这个XML;

<ChartXml>
   <Category type="xAxis">
      <Value>Mon</Value>
      <Value>Tue</Value>
      <Value>Wed</Value>
      <Value>Thurs</Value>
      <Value>Friday</Value>
   </Category>
</ChartXml>

这个班级结构;

[XmlRoot("ChartXml")]
public class ChartXml
{
    [XmlElement("Category")]
    public Category Category;            
}

public class Category
{        
    [XmlAttribute("type")]
    public string Type;        
    [XmlArray("Value")]
    public List<string> Values;
}

现在,当我尝试将XML序列化为ChartXml对象时,我得到的对象包含类型属性设置正确的类别,但我没有得到我的字符串列表。

我猜测我设置课程的方式有问题。

谢谢, 詹姆斯。

2 个答案:

答案 0 :(得分:3)

使用[XmlElement("Value")]代替[XmlArray("Value")],例如:

[XmlRoot("ChartXml")]
public class ChartXml
{
    [XmlElement("Category")]
    public Category Category;
}

public class Category
{
    [XmlAttribute("type")]
    public string Type;

    [XmlElement("Value")]
    public List<string> Values;
}

序列化:

var obj = new ChartXml { Category = new Category { Type = "t", Values = new List<string> { "a", "b", "c" } } };
var ser = new XmlSerializer(obj.GetType());

using (var tw=new StringWriter())
{
    ser.Serialize(tw, obj);

    Console.WriteLine(tw.ToString());
}

输出:

<?xml version="1.0" encoding="utf-16"?>
<ChartXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:
//www.w3.org/2001/XMLSchema">
  <Category type="t">
    <Value>a</Value>
    <Value>b</Value>
    <Value>c</Value>
  </Category>
</ChartXml>

答案 1 :(得分:0)

使用[XmlElement(“Value”)]代替[XmlArray(“Value”)]