【问题标题】:How to omit C# object property name node in XML Serialization如何在 XML 序列化中省略 C# 对象属性名称节点
【发布时间】:2020-05-20 11:03:45
【问题描述】:

我的模型类是:

public class Group
{
   public Employee Employee {get;set;}
}
public class Employee {
   public string Name {get;set;}
}

所以在序列化之后我的 xml 看起来像这样:

<Group>
  <Employee>
      <Name>Haley</Name>
  </Employee>
</Group>

但我希望它是:

<Group>
  <Name>Haley</Name>
</Group>

那么是否有任何属性等来实现这一点?我知道我可以使用一些代码来做到这一点,但如果有一些更简单的解决方案会很好。我看到了列表和数组的解决方案(使用 [XmlElement] 属性),但看起来它不适用于非集合属性。

【问题讨论】:

  • 您可以通过将[XmlElement("Name")] 添加到public Employee Employee {get;set;}&lt;Employee&gt; 重命名为&lt;Name&gt;,如Serialize/Deserialize different property names? 所示,它们通过标记Name 将类Employee 序列化为字符串值使用[XmlText],如C# - Xml Element with attribute and node value 所示。这就是你想要的吗?
  • 我不这么认为,因为如果里面有多个属性怎么办?比如姓名、姓氏、电话等?然后我不能使用属性就像[XmlElement("Name")]
  • 那你能澄清一下你的问题吗?你是说Employee 可能有多个属性并且你想将它们全部冒泡到父级?
  • 无论如何,我认为没有办法在不使用代码的情况下将多个元素冒泡到父节点——例如代理属性或 DTO。
  • 好吧,我是这么认为的。那就谢谢了。

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


【解决方案1】:

为什么不直接

public class Group
{
    [XmlElement("Name")]
    public string name { get; set; }
    [XmlElement("Surname")]
    public string surname { get; set; }
    [XmlElement("phone")]
    public string phone { get; set; }
}

然后将其序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多