对如何在C#中使用JSON感到困惑

Sel*_*Net 9 .net c# serialization json datacontract

关于使用C#和JSON的每一个问题的答案似乎是"使用JSON.NET",但这不是我正在寻找的答案.

我说的原因是,从我在文档中可以阅读的所有内容来看,JSON.NET基本上只是构建在.NET框架中的DataContractSerializer的更好表现版本......

这意味着如果我想反序列化一个JSON字符串,我必须为我可能拥有的每个请求定义完整的强类型类.因此,如果我需要获取类别,帖子,作者,标签等,我必须为这些内容中的每一个定义一个新类.

如果我构建了客户端并确切知道字段是什么,这很好,但是我正在使用别人的API,所以我不知道合同是什么,除非我下载一个示例响应字符串并从JSON字符串手动创建类.

这是唯一的方法吗?有没有办法让它创建一种可以用json ["propertyname"]读取的哈希表?

最后,如果我自己必须自己构建类,那么当API发生变化而他们没有告诉我(因为Twitter似乎因为这样做而臭名昭着)时会发生什么?我猜我的整个项目都会破坏,直到我进入并更新对象属性...

那么使用JSON时的一般工作流程到底是什么?一般来说,我的意思是与图书馆无关.我想知道它是如何完成的,而不是专门针对目标库......

Ste*_*han 5

您要求与库无关是非常困难的,因为您使用json的方式实际上取决于您使用的库.作为JSON.NET中的一个示例,有多种方法可以使用JSON.您可以通过直接序列化到对象来讨论该方法.这是类型安全的,但如果API中的数据发生更改,则会中断.但是,还有一个LINQ-to-JSON提供了一个JObject(其行为与XElement非常相似),提供了一种方法来按照您在问题中的要求执行JObject ["key"].如果您真的只是想在C#中使用JSON的灵活方式,那么请查看JSON.NET的LINQ-to-JSON.

实际上,无论你如何做,如果API改变你的代码可能会破坏.即使您只是基于哈希表的方法,如果数据返回发生变化,您的代码仍可能会中断.

编辑

JSON.NET文档

例子

如果您查看示例,第二个应该为您提供LINQ-to-JSON如何工作的一个很好的示例.它允许您使用它而无需定义任何类.一切都转换为标准框架类(主要是集合和字符串).这避免了维护类的需要.