【问题标题】:Is there a System.Text.Json's substitute for Json.NET's JsonProperty(Order)?是否有 System.Text.Json 替代 Json.NET 的 JsonProperty(Order)?
【发布时间】:2020-01-28 16:37:13
【问题描述】:

由于System.Text.Json 现在是.NET Core 3.0 的 JSON 库,是否有匹配 Json.NET 的 JsonProperty(Order) 的属性/参数?我浏览了扩展 System.Text.Json.Serialization.JsonAttribute 的类,但似乎没有一个能达到这个目的。

通过JsonSerializer.Write.HandleObject.cs 等并没有向我展示任何可以直接替换此处的旧属性的内容。我错过了什么吗?如果没有,在这里复制遗留行为的最简单方法是什么?

【问题讨论】:

  • 我不知道答案,但是在查看了代码之后,我猜 JsonClassInfo.CreatePropertyCache() 中需要一个更复杂的比较器
  • 如果您实际上不需要 Json.NET 的更高级功能,它只是 .NET Core 3 的 JSON 库。 System.Text.Json 是其他框架和库以及不需要多余装饰的客户端的坚实执行基础,但期望每个客户端场景都映射到它而不需要(可能是大量的)额外努力要求太多。对于应用程序作者,我还不会将 Json.NET 称为“遗留”... TL;DR:如果您为它编写代码并提交拉取请求,将会有替代品,但可能不会早于此。
  • @JeroenMostert 这不是我的意见 - 这是微软的官方意见(尤其重要,例如 ASP.NET);成为 Json.NET 的替代品是他们的官方目标之一,他们明确地吹嘘它。不过,我部分同意 tl;dr 部分 - 直到有人报告缺少某个功能,实现可能不会出现。无论好坏,这在某种程度上都是由社区驱动的。
  • 在微软自己的场景中成为 Json.NET 的直接目标绝对是一个目标,但他们也state 认为性能将优先于功能,因此(例如)将 JSON 映射到dynamic(另一个 Json.NET 功能)可能永远不会在基本 API 中占有一席之地,而被归入扩展包。而且,如果 ASP.NET 目前不需要按顺序编写属性的能力(符合标准的解析器不需要),那么这同样可能最终在优先级列表中非常低,如果有的话。
  • 此功能的可取之处在于,由于属性从语义上开始没有排序,实际上添加排序应该相对便宜,因此实现它不太可能与任何性能目标发生冲突。

标签: c# json .net-core-3.0 system.text.json


【解决方案1】:

当前版本的 System.Text.Json 不直接支持 Json.NET 的 JsonProperty(Order)。但是,您可以为此创建一个JsonConverter

实现此目的的示例:.NET core 3: Order of serialization for JsonPropertyName (System.Text.Json.Serialization)

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 2020-02-16
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多