【问题标题】:Deserializing some JSON with JSON.NET使用 JSON.NET 反序列化一些 JSON
【发布时间】:2009-09-19 08:50:40
【问题描述】:

我对 JSON 很陌生,我需要解析一些 API 提供的内容。一个快速的谷歌搜索出现了JSON.NET,所以我现在尝试使用它将这个 JSON 解析为一个列表对象。首先,JSON.NET 是最好的库吗

这就是我想要做的:例如,我有一个名为 Item 的 。 json 有许多“元素”(如果它们被称为),每个 包含 3 个字段:一个名为 id 的整数、一个名为 name 的字符串和一个名为 creationTime 的日期时间。我想将 json 中的所有这些 Item “元素”解析为 Item 对象列表。我在 Item 类中创建了 3 个字段来匹配 JSON。如何使用 JSON.NET 做到这一点?

我试过了:

List<Item> fav = (List<Item>)new JsonSerializer().Deserialize(new JsonReader((TextReader)new StreamReader(response.GetResponseStream())));

但它似乎不起作用。我收到一个转换错误 - 它只是无法将它处理成一个列表附件,但我什至不确定它是否能够将 JSON 处理成一个 Item 类(JSON.NET 的文档不是很好,但我我明天要大量调试它)。

你能给我一些示例代码来解释我如何用 JSON.NET 解析它吗?

谢谢!

更新: 顺便说一句,忘了提 - 我的项目将针对 .NET Framework 2.0,所以我使用的是 JSON.NET 的旧版本:1.3.1。是否有任何巨大的优势可以使项目值得转换为 .NET 3.5,同时降低最低系统要求?

更新 #2: 我决定在 System.Web.Extensions.dll 中使用 JavascriptSerializer 类而不是 JSON.NET,关于此的问题已发布 here。谢谢!

【问题讨论】:

  • “似乎不起作用”不是很详细。发生什么了?是的,我想说 LINQ 总体上比 .NET 3.5 具有相当大的优势,这意味着您可以使用更新的 JSON.NET 版本。
  • @Jon 首先,据我所知,这是你第一次回复我的帖子,谢谢!不幸的是我不知道 LINQ,但我想学习它!我将尝试开始使用更新的版本。不起作用的是我收到一个转换错误 - 它只是无法将其转换为这样的列表附件。至少,这就是我认为的意思,因为 JSON.NET 的文档记录不是很好。以前有没有人使用过 JSON.NET,如果有,你能解释一下你将如何解决这样的问题吗?谢谢! ;)
  • 我怀疑问题在于您专门寻求旧版本 JSON.NET 的帮助;许多人只熟悉最新版本。
  • 评论不会“影响”帖子...只有编辑和答案。
  • @Marc 哦,我从来不知道!谢谢!

标签: c# .net json serialization json.net


【解决方案1】:

我知道这个问题大约有 3 年的历史了,但我想我只想补充一点,如果你想构建一个基于 JSON 的 Api,NancyFx 很棒:http://nancyfx.org/

编辑: 根据要求提供示例,非常简单。要开始使用,只需通过 NuGet 将 nancyfx asp 包添加到 Web 项目。 (如果您要将其添加到子路径上的现有应用程序中,则需要将位置添加到 web.config,否则您可以继续使用)

using Nancy;
using Nancy.ModelBinding;

public class Api : NancyModule
        {
            public Api()
            {
                Get["/api/order/create"] = x => 
                { 
                    var order = this.Bind<Order>(); //xml/json negotiated based on content header

                    var result = ... // Do stuff here

                    return Response.AsJson(result); 
                };
            }       
        }

【讨论】:

  • 看起来不错!您能否链接/发布相关的代码示例?谢谢。
  • 谢谢 - 看起来优雅而直接。但是这个问题涉及一个不同的主题:解析 JSON,而不是编写 JSON。 当您 Bind&lt;Order&gt;() 时,请求 JSON 是否被解析为 order 如果不是:不幸的是,当前接受的答案也与问题的主题不匹配 - 不知道为什么我在 3 年前接受它.我最终使用了内置的序列化工具 (stackoverflow.com/q/1450513/130164)。您是否知道NancyFx 是否可以解析 JSON,如果可以,您能否将反序列化 JSON 输入的代码示例附加到您的答案中,以便这个问题回到正轨?
  • 你是对的 - “this.Bind()” 获取请求的主体并将其反序列化为“order”,非常简洁。 Nancy 使用 JSON.Net 作为其默认的 json 解析器,ASP.Net MVC4 也将默认使用 Json.Net。作为替代方案,还有 ServiceStack,但我自己一直对 Json.net 感到满意。
【解决方案2】:

我建议您升级到 .net framework 3.5 并使用 ASP.Net MVC 来构建您的 json 服务。见:

http://msmvps.com/blogs/omar/archive/2008/10/03/create-rest-api-using-asp-net-mvc-that-speaks-both-json-and-plain-xml.aspx

【讨论】:

  • 此链接不再有效。可以把相关信息放在这里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多