使用JSON.NET反序列化一些JSON

3
我很新于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,并在这里发布了一个问题。谢谢!

1
“Doesn't seem to work” 不是很详细。发生了什么?我认为,LINQ 在 .NET 3.5 中是一个相当巨大的优势,这意味着您可以使用更更新的 JSON.NET 版本。 - Jon Skeet
@Jon,首先,据我所知,这是你第一次回复我的帖子,所以谢谢你!不幸的是,我不知道LINQ,但我想学习它!我将尝试开始使用更近期的版本。问题在于我得到了一个转换错误 - 它无法将其转换为这样的列表封装。至少,我认为这就是它的意思,因为JSON.NET文档不是很好。有人之前使用过JSON.NET吗?如果有,你能解释一下如何解决这个问题吗?谢谢!;) - Maxim Zaslavsky
我怀疑问题在于你特别要求使用旧版本的JSON.NET来寻求帮助;很多人只熟悉最新版本。 - Marc Gravell
评论不会“顶起”帖子……只有编辑和回答才会。 - Marc Gravell
@Marc 哦,我从来不知道那个!谢谢! - Maxim Zaslavsky
2个回答

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); 
                };
            }       
        }

看起来不错!你能否提供一个相关的代码示例链接或发布吗?谢谢。 - Maxim Zaslavsky
谢谢 - 看起来简洁明了。但是这个问题涉及到不同的主题:解析JSON,而不是编写JSON。当你Bind<Order>()时,请求JSON是否被解析为order?如果没有:不幸的是,目前接受的答案也不符合问题的主题 - 不确定为什么3年前我接受了它。我最终使用了内置的序列化工具(https://dev59.com/M0nSa4cB1Zd3GeqPN295)。您知道**NancyFx是否可以解析JSON**,如果可以,您能否附加一个反序列化JSON输入的代码示例到您的答案中,以便这个问题重新回到正轨? - Maxim Zaslavsky
你是正确的 - "this.Bind<Order>()" 会获取请求的主体并将其反序列化为 "order",非常简洁。Nancy 使用 JSON.Net 作为默认的 JSON 解析器,而 ASP.Net MVC4 也将默认使用 Json.Net。另外还有 ServiceStack 作为替代方案,但我自己一直都很喜欢 Json.net。 - Doobi

0

1
这个链接已经失效了。你能把相关信息放在这里吗? - Kyle Falconer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接