【问题标题】:Retrieve XElement's children as top level of object检索 XElement 的子对象作为顶级对象
【发布时间】:2020-04-06 13:43:32
【问题描述】:

当使用XElement API 并请求特定元素(通过.Element("Foo"))时,我会返回一个对象,当它序列化为 JSON(使用 ASP.NET Core)时,会生成一个具有单个字段的对象(Foo),然后包含 Foo 的所有子对象。

如何使 Foo 的所有子级都包含在序列化对象的顶层? .Elements() 方法将为我获取元素,但我不希望它们作为集合,我希望它们作为对象上的字段。

【问题讨论】:

  • 创建你的类并序列化这个类的实例,而不是序列化XElements?
  • 我实际上只是想要一个对象,它是从 API 返回的某些 XML 的属性,所以我想尽可能避免创建大量脆弱的样板 XML POCO。
  • 然后创建一个自定义序列化程序。
  • 这将涉及必须创建我说过要避免的样板 POCO。不过,看起来我不会避免这样做。 :-(
  • 显然没有,因为您已经尝试过如何使用默认序列化程序对XElement 进行序列化。

标签: c# linq-to-xml xelement


【解决方案1】:

如果您对默认序列化程序如何序列化XElement 不满意,您基本上有两种选择。

  1. 创建您的自定义类型并序列化此类型的实例。

  2. XElement 或您的自定义类型创建自定义转换器。

如果您使用的是 System.Text.Json,它是 ASP.NET Core 3.x 中的默认值,您可以从 System.Text.Json.Serialization.JsonConverter<T> 继承并覆盖 ReadWrite 方法。

如果您仍在使用 Newtonsoft.Json,则继承自 Newtonsoft.Json.JsonConverter<T> 并覆盖 ReadJsonWriteJson 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多