XMLSerializer并使用属性创建XML数组

Ral*_*alf 2 c# highrise xmlserializer

我正在尝试创建一个可以通过XMLSerializer序列化为XML的类.

目标XML应该看起来像这样

<subject_datas type="array">
    <subject_data>
           ...
    </subject_data>
    <subject_data>
           ...
    </subject_data>
</subject_datas>
Run Code Online (Sandbox Code Playgroud)

问题是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; }
}
Run Code Online (Sandbox Code Playgroud)

但是因为类是Collection,所以XMLSerializer将序列化Collection中的对象而不是Collection本身.所以我的Type属性被忽略了:(

dan*_*dan 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; }
    }
Run Code Online (Sandbox Code Playgroud)