我有一个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
答案 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。