【问题标题】:XmlSerializer - Element name for generic list classXmlSerializer - 通用列表类的元素名称
【发布时间】:2015-05-06 12:01:38
【问题描述】:

我正在尝试使用 XmlSerializer 将对象序列化为 XML

我希望得到这样的东西:

<User>
    <username>administrator</username>
    <email>administrator@email.com</email>
        <roles>
            <whatever id="D3DCBCDA-AD61-4764-B5A1-057D654F1C26">
                <role>admin</role>
            </whatever>
        </roles>
</user>

但我却得到了这个:

<User>
    <username>administrator</username>
    <email>administrator@email.com</email>
    <roles>
        <RoleDTO id="D3DCBCDA-AD61-4764-B5A1-057D654F1C26">
            <role>admin</role>
        </RoleDTO>
    </roles>
</User>

代码

XmlSerializer x = new System.Xml.Serialization.XmlSerializer(xml.GetType());
XmlSerializer xsSubmit = new XmlSerializer(typeof(UserDTO));
StringWriter sww = new StringWriter();
XmlWriter writer = XmlWriter.Create(sww);
xsSubmit.Serialize(writer, user);
var xmll = sww.ToString(); // My xml


List<RoleDTO> rl = new List<RoleDTO>();

        rl.Add(new RoleDTO { roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });


UserDTO user = new UserDTO 
             {
                username = "administrator",
                email = "administrator@email.com",
                role = rl
             };

型号

namespace Model.DTO
{
    [XmlRoot("User")]
    public class UserDTO
    {
        public string username { get; set; }
        public string email { get; set; }
        public List<RoleDTO> role { get; set; }
    }

    public class RoleDTO
    {
        [XmlAttribute("Id")]
        public Guid roleId { get; set; }
        public string role { get; set; }
    }
}

我试图用 [XmlRoot("whatever")][XmlElement("whatever")] 装饰类 RoleDTO 没有成功。

有什么想法吗?

【问题讨论】:

    标签: c# .net xml serialization xml-serialization


    【解决方案1】:

    你需要用

    装饰User DTO类的角色属性
    [XmlElement("whatever")] 
    

    不是 RoleDTO 类。

    public class UserDTO
    {
        public string username { get; set; }
        public string email { get; set; }
        [XmlElement("whatever")] 
        public List<RoleDTO> role { get; set; }
    }
    

    【讨论】:

    • 似乎我忽略了最明显的事情:) 谢谢先生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多