【问题标题】:Parse/Encode JSON without Deserializing/Serializing classes在不反序列化/序列化类的情况下解析/编码 JSON
【发布时间】:2012-03-12 06:37:28
【问题描述】:

我正在寻找 .NET 的 JSON 解析器和编码器,它可以将 JSON 解析为自己的数据结构,然后我可以导航,而不是直接将其反序列化为一个类。在 Java 中,我使用 JettisonJSONObjectJSONArray,它们非常好用。

我不想(反)序列化的原因有很多:

  1. 序列化程序倾向于将元数据添加到 JSON 并要求该元数据进行反序列化(例如 fastJSON 和 JSON.NET 添加类型信息)。
  2. 我不想麻烦地创建一堆类来处理所有不同类型的数据。此外,我希望能够忽略我不感兴趣的字段,而不必向它们添加属性。

有什么可用的,还是我必须移植 Jettison 的一个子集?

【问题讨论】:

    标签: c# .net json jettison


    【解决方案1】:

    您指出的序列化的缺点并不真正存在,至少在 JSON.NET 的情况下:

    1. JSON.NET 默认不添加任何元数据。如果需要(例如,当一个属性可以保存不同类型的值时),您可以告诉它添加元数据,但这是可选的。
    2. 您将创建类的麻烦替换为处理字符串和强制转换的麻烦,我认为这更糟。此外,您可以忽略不感兴趣的字段,只是不要将它们添加到您的类型中。

    但是,如果你真的想这样做,你可以。等价的类型是JObjectJArray,所以,如果你想反序列化一些对象,使用:

    JObject obj = JsonConvert.DeserializeObject<JObject>(json);
    

    作为另一种选择,您根本不必指定您想要的类型,它会返回JObjectJArray

    object objectOrArray = JsonConvert.DeserializeObject(json);
    

    【讨论】:

    • 谢谢,应该这样做。 JSonConvert.DeserializeObject&lt;JObject&gt;(json) 相当于 Jettison 中的 new JSONObject(json)
    • 但他说没有反序列化??
    • @KansaiRobot 这个问题解释了为什么反序列化有问题。即使您调用的方法名称中有“反序列化”,这种方法也不存在这些问题。
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2018-09-16
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多