c# - XMLSerializer 并使用属性创建 XML 数组

标签 c# xmlserializer highrise

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

目标 XML 应该如下所示

<subject_datas type="array">
    <subject_data>
           ...
    </subject_data>
    <subject_data>
           ...
    </subject_data>
</subject_datas>

问题在于 subject_datas 标记的类型属性。我尝试的是将其设计为派生列表,并附加一个带有 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 属性被忽略:(

最佳答案

您可以使用组合而不是继承

    [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; }
    }

关于c# - XMLSerializer 并使用属性创建 XML 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746695/

相关文章:

c# - Ubbi Dubbi c#程序代码

c# - 云存储账户

c# - 37signals Highrise .NET (c#) API

c# - ASP.NET MVC 中的主页

c# - UserID 在 ASP.NET Identity 中是字符串类型的可能缺点

c# - 使用 StringReader 与 XmlNodeReader 反序列化对象属性

c# - XmlSerializer.FromTypes 产生内存泄漏?

c# - InvalidOperationException 错误反射(reflect)类

javascript - 使用 GAS 通过 API 访问高层数据