【问题标题】:Which JSON Serializers can handle C#'s Dictionary<TKey,T>哪些 JSON 序列化器可以处理 C# 的 Dictionary<TKey,T>
【发布时间】:2016-07-11 09:07:43
【问题描述】:

一段时间以来,我一直在使用 .Net 4.x 的几个序列化程序,并且认为我从 .Net 3.5 次继承了它们。我刚刚意识到,当时的大多数序列化程序通常无法序列化和反序列化任何 C# 字典。

在我现在正在重构的代码中,我看到了一些变通方法,例如流式传输 List 而不是 Dictionary (我认为这是一种解决方法,希望避免而是使用内置的在序列化程序的功能中)。

你最喜欢的 JSON 序列化器的状态是什么?

另外:您知道您的序列化程序是否符合 JSON API 标准? (JSONAPI.org)

【问题讨论】:

  • 使用字典上的ToList() 转换成List&lt;KeyValuePair&lt;string,T&gt;&gt;
  • 谢谢亚历克斯。如果序列化程序没有开箱即用地做这样的事情,这可能是一个公平的工作。这个问题更多地是关于确实支持字典序列化的序列化器的体验。并且:我在序列化 XML 时经常使用这种技术,但我不太喜欢它,因为它在输出文件中生成了 KeyValuePair “混乱”。我想不是 JSON。值得一试。再次感谢。

标签: c# json dictionary serialization json-api


【解决方案1】:

http://www.newtonsoft.com/json 是我用得最多的。一种更快且非常灵活的方法。它是 asp.net MVC/WebAPI 使用的默认序列化程序

https://github.com/kevin-montrose/Jil 由 StackOverflow 使用,并且速度非常快。

Jsonapi 是一个更高级别的关注点。它不会改变 json 的反序列化方式。它只是用于返回数据的形状/格式的模式、约定、标准、模式。它与选择哪个序列化程序没有太大关系。

【讨论】:

  • 感谢您将我指向 Jil。看起来很有趣,在当前项目中可能很适合我。
  • Jsonapi:是的,你是对的。关于如何存储/处理引用/关系的约定似乎更进一步。必须看看我如何让我的 WebService 层与 Ember 的标准 JSON API 适配器一起工作。
【解决方案2】:

在多年使用不同的序列化程序并尝试让它们处理各种集合类型之后,我得出了一个结论:

通常最好将我的复杂对象转换为简单的 DTO(数据传输对象),它只具有简单的公共属性(或字段),并带有用于所有“集合”的数组。然后所有的序列化器都可以应付,包括我还不知道的序列化器,但必须移植到明年……。

换句话说,写更多的代码,但至少这是我可以在睡梦中写的代码! Automapper 还可以帮助减少创建 DTO 所需的自定义代码量。

【讨论】:

  • 感谢您的评论,伊恩。使用哪种方法可能有点哲学。我想要持久化的每个内部类的 DTO 层都有它的魅力。随着 C# 类被序列化为 XML,我很喜欢这种方法。目前,我更倾向于按原样使用 C# 类 - 以及在客户端/JavaScript 端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多