我正在尝试创建一个可以通过XMLSerializer序列化为XML的类。
目标XML应该看起来像这样
<subject_datas type="array">
<subject_data>
...
</subject_data>
<subject_data>
...
</subject_data>
</subject_datas>
问题是subject_datas标记的type属性。我尝试的是将其设计为派生List并附加具有XMLAttribute属性的属性,如此
[XmlRoot(ElementName = "subject_datas")]
public class SubjectDatas : List<SubjectData>
{
public SubjectDatas (IEnumerable<SubjectData> source)
{
this.AddRange(source);
Type = "array";
}
[XmlAttribute(AttributeName = "type")]
public string Type { get; set; }
}
但是因为类是Collection,所以XMLSerializer将序列化Collection中的对象而不是Collection本身。所以我的Type属性被忽略了:(
答案 0 :(得分:5)
您可以使用合成而不是继承
[XmlRoot(ElementName = "subject_datas")]
public class SubjectDatas
{
[XmlElement(ElementName = "subject_data")]
public List<SubjectData> SubjectDatas2 { get; set; }
public SubjectDatas(IEnumerable<SubjectData> source)
{
SubjectDatas2= new List<SubjectData>();
this.SubjectDatas2.AddRange(source);
Type = "array";
}
private SubjectDatas()
{
Type = "array";
}
[XmlAttribute(AttributeName = "type")]
public string Type { get; set; }
}