将XmlAttribute添加到C#类以进行序列化

时间:2015-03-28 12:49:31

标签: c# xml serialization xml-attribute

我在这里有点头疼,因为我认为我正确地做到了这一点! 我需要创建一个xml文件,如下所示(我已经省略了名称空间声明)

<races> <race racename="race one"> <horse> <name>Silver</name> <age>6</name> </horse> </race> </races>

班级比赛是班级比赛的集合,而班级比赛是班级马的集合。下面是我所拥有的种族类的相关代码,并且正在引起问题(至少我认为)。

[Serializable]
[XmlType("race")]
public class Race : CollectionBase
{
    private string _raceName;        

    [XmlAttribute("racename")]
    public string RaceName
    {
        get
        {
            return this._raceName;
        }
        set
        {
            this._raceName = value;
        }
    }

我按预期构建了xml文件除了属性racename没有被序列化。它绝对是在序列化之前分配给race对象的。有什么想法吗?我显然在某个地方遗漏了一些东西,但我不确定我是如何测试它失败的地方。任何帮助将不胜感激!

约恩。

2 个答案:

答案 0 :(得分:1)

在实现IEnumerable的类中,只有集合是序列化的,而不是公共属性。

使用Race类中的Horse集合并删除:CollectionBase

[Serializable]
[XmlType("race")]
public class Race
{
    [XmlElement("horse")]
  public  List<Horse> Horses { get; set; }


    [XmlAttribute("racename")]
    public string RaceName
    {
        get;

        set;

    }
    public Race()
    {
        Horses = new List<Horse>();
    }
}

结果

<race xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" racename="race one">
 <horse>
  <Name>Silver</Name>
  <Age>6</Age>
 </horse>
</race>

答案 1 :(得分:0)

我建议你在解决方案中创建一个测试控制台应用程序,并测试代码如http://pastebin.com/bP340WmR,如果它工作正常,创建一个对象集合并尝试序列化。一步一步地进行将有助于了解问题的确切位置。