【问题标题】:Collect serialized items of multiple enumerable members to a same parent将多个可枚举成员的序列化项目收集到同一个父级
【发布时间】:2019-06-12 10:26:39
【问题描述】:

考虑以下类:

[Serializable]
public class MyClass
{
    [XmlAttribute("id")]
    public int ID { get; set; }

    [XmlArrayItem("User")]
    public List<string> Users { get; set; }

    [XmlArrayItem("Role")]
    public List<string> Roles { get; set; }
}

现在我想转换类定义以获得以下对类实例的 XML 序列化的预期结果:

<MyClass id="123">
  <Access>
    <User>User A</User>
    <User>User B</User>
    <User>User C</User>
    <Role>Role A</Role>
    <Role>Role B</Role>
    <Role>Role C</Role>
  </Access>
</MyClass>

此外,它必须是可反序列化的。我尝试将[Xml Array("Access")] 属性应用于UsersRoles 属性,但出现InvalidOperationException

如果不用IXmlSerializable 实现也能解决问题就好了。

【问题讨论】:

    标签: c# xml-serialization xmlserializer


    【解决方案1】:

    看起来您只需要创建一个“访问”类来嵌套您的用户/角色。

    [XmlRoot(ElementName="Access")]
    public class Access {
        [XmlElement(ElementName="User")]
        public List<string> User { get; set; }
        [XmlElement(ElementName="Role")]
        public List<string> Role { get; set; }
    }
    
    [XmlRoot(ElementName="MyClass")]
    public class MyClass {
        [XmlElement(ElementName="Access")]
        public Access Access { get; set; }
        [XmlAttribute(AttributeName="id")]
        public string Id { get; set; }
    }
    

    【讨论】:

    • 这么简单?!哈哈!谢谢。
    猜你喜欢
    • 2020-09-04
    • 2023-03-10
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多