没有XmlRoot元素的XML序列化和反序列化

时间:2016-05-09 14:22:56

标签: c# xml serialization

我有一个A类,它有一个使用Xml属性标记的B对象列表

[Serializable]
A
{
       int A1{get;set}

       [XmlArray("Bs")]
       [XmlArrayItem("B")]
       List<B> Bs;
}


[Serializable]
B
{
       [XmlAttribute("b1")]
       int B1{get; set}

       [XmlAttribute("b2")]
       string B2{get; set}
}

我希望我的XML看起来像这样:

<Bs>
    <B b1=1 b2="somevalue1" />
    <B b1=2 b2="somevalue2" />
    <B b1=3 b2="somevalue3" />
    <B b1=4 b2="somevalue4" />
</Bs>

我只想序列化属性Bs。我不想序列化A.我目前收到错误:

There is an error in XML document (1,2) , System.InvalidOperationException: <Bs xlms:“”> was not expected

我该怎么做才能序列化B

1 个答案:

答案 0 :(得分:1)

我认为这是从一个真实的例子中删除的,但这里有一些问题。

您的课程和媒体资源需要公开,您的课程需要包含class关键字:

public class B
{
    [XmlAttribute("b1")]
    public int B1 { get; set; }

    [XmlAttribute("b2")]
    public string B2 { get; set; }
}

除此之外,Serializable属性并非必要,因为它与XmlSerializer无关。

要序列化具有特定根名称的List<B>,您需要创建XmlSerializer,如下所示:

var serializer = new XmlSerializer(typeof(List<B>), new XmlRootAttribute("Bs"));

您的XML也无效,因为您的每个b1属性都需要引号。

有关工作示例,请参阅this fiddle