哪些JSON序列化程序可以处理C#和#x27;s字典<;TKey,T>;

哪些JSON序列化程序可以处理C#和#x27;s字典<;TKey,T>;,c#,json,dictionary,serialization,json-api,C#,Json,Dictionary,Serialization,Json Api,一段时间以来,我一直在使用.NET4.x中的几个序列化程序,我想我从.NET3.5次继承了它们。我刚刚意识到,当时的大多数序列化程序一般都无法序列化和反序列化任何C#字典 在我现在正在重构的代码中,我看到了一些解决方案,比如流出一个列表,而不是一个字典(我认为这是一个工作,并且需要避免使用,而更确切地说是使用串行化器的内置能力)。 您最喜欢的JSON序列化程序的状态如何 另外:您知道您的序列化程序是否符合JSON API吗?(JSONAPI.org)是我用得最多的一个。其中一个速度更快,非常灵活

一段时间以来,我一直在使用.NET4.x中的几个序列化程序,我想我从.NET3.5次继承了它们。我刚刚意识到,当时的大多数序列化程序一般都无法序列化和反序列化任何C#字典

在我现在正在重构的代码中,我看到了一些解决方案,比如流出一个列表,而不是一个字典(我认为这是一个工作,并且需要避免使用,而更确切地说是使用串行化器的内置能力)。 您最喜欢的JSON序列化程序的状态如何

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

是我用得最多的一个。其中一个速度更快,非常灵活。它是asp.net MVC/WebAPI使用的默认序列化程序

由StackOverflow使用,速度非常快


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

经过多年对不同序列化程序的经验,并试图让它们处理各种类型的集合,我得出了一个结论:

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


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

字典上可能重复使用的
ToList()
,以转换为
列表。如果序列化程序没有做这种开箱即用的事情,那么这可能是一个公平的解决办法。这个问题更多的是关于使用确实支持字典序列化的序列化程序的经验。而且:我在序列化XML时经常使用这种技术,我不太喜欢它,因为它在输出文件中生成了KeyValuePair“混乱”。我想JSON是不行的。值得一试。再次感谢。谢谢你把我指给吉尔。看起来很有趣,在当前的项目中可能会很适合我。杰索纳皮:是的,你说得对。关于如何存储/处理引用/关系以及其他一些方面的约定似乎更进一步。我必须看看如何让我的WebService层与Ember的标准JSON API适配器一起工作。谢谢你的评论,Ian。使用哪种方法可能有点哲学性。我想要持久化的每个内部类的DTO层都有它的魅力。随着C#类被序列化为XML,我非常喜欢这种方法。目前,我更倾向于使用C#类——以及客户端/JavaScript端。