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

时间:2009-09-19 08:50:40

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

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

这就是我要做的事情:例如,我有一个名为Item 的类。 json有许多“元素”(如果这就是它们的名称),每个包含3个字段:一个名为id的整数,一个名为name的字符串和一个名为creationTime的日期时间。我想将所有这些Item“元素”从json 解析为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,同时破坏最小的系统要求?

UPDATE#2:我决定在System.Web.Extensions.dll而不是JSON.NET中使用JavascriptSerializer类,并且发布了有关该问题的问题here。谢谢!

2 个答案:

答案 0 :(得分: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); 
                };
            }       
        }

答案 1 :(得分:0)

我建议你升级到.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