Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON.NET反序列化某些JSON_C#_.net_Json_Serialization_Json.net - Fatal编程技术网

C# 使用JSON.NET反序列化某些JSON

C# 使用JSON.NET反序列化某些JSON,c#,.net,json,serialization,json.net,C#,.net,Json,Serialization,Json.net,我对JSON非常陌生,需要解析API提供的一些内容。一个快速的google搜索出现了,所以我现在尝试使用它将这个JSON解析为一个列表对象。首先,JSON.NET是用于此目的的最佳库吗 这就是我要做的:例如,我有一个名为Item的类。json有许多“元素”(如果它们被称为元素的话),每个包含3个字段:一个名为id的整数、一个名为name的字符串和一个名为creationTime的日期时间。我想将json中的所有这些项“元素”解析为项对象列表。我在Item类中创建了3个字段来匹配JSON。如何使用

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

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

我试过:

List<Item> fav = (List<Item>)new JsonSerializer().Deserialize(new JsonReader((TextReader)new StreamReader(response.GetResponseStream())));
List fav=(List)new JsonSerializer()。反序列化(new JsonReader((TextReader)new StreamReader(response.GetResponseStream()));
但它似乎不起作用。我得到了一个强制转换错误——它无法将其处理到列表附件中,但我甚至不确定它是否能够将JSON处理到一个Item类中(JSON.NET没有很好的文档记录,但我明天将对其进行大量调试)

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

谢谢

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


更新#2:我决定在System.Web.Extensions.dll中使用JavascriptSerializer类,而不是JSON.NET,并就此提出了一个问题。谢谢

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


我意识到这个问题已经提出了3年,但我想补充一点,如果你想构建一个基于JSON的Api,NancyFx非常棒:

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

使用Nancy;
使用Nancy.ModelBinding;
公共类Api:NancyModule
{
公共Api()
{
获取[“/api/order/create”]=x=>
{ 
var order=this.Bind();//基于内容头协商的xml/json
var result=…//在这里执行操作
返回Response.AsJson(result);
};
}       
}

“似乎不起作用”不是很详细。会发生什么?是的,我想说LINQ对.NET 3.5总体来说是一个巨大的优势,也就是说你可以使用JSON.NET的最新版本。@Jon嗯,首先,据我所知,这是你第一次回复我的帖子,谢谢!很遗憾,我不知道LINQ,但我希望学习它!我将尝试开始使用更新的版本。不起作用的是,我得到了一个铸造错误-它只是无法将其转换为这样一个列表附件。至少,我相信这就是它的意思,因为JSON.NET没有很好的文档记录。以前有人使用过JSON.NET吗?如果有,您能解释一下如何解决这个问题吗?谢谢!;)我怀疑问题在于,您特别要求帮助使用较旧版本的JSON.NET;很多人只会熟悉最新版本。评论不会“撞”帖子。。。只有编辑和答案。@Marc哦,我从来都不知道!谢谢看起来不错!你能链接/发布一个相关的代码示例吗?谢谢。谢谢-看起来优雅而直截了当。但这个问题涉及另一个主题:解析JSON,而不是编写JSON。当您
Bind()
时,请求JSON是否被解析为
顺序
?如果不是:不幸的是,目前被接受的答案也与问题的主题不匹配——不确定我为什么在3年前接受了它。我最终使用了内置的序列化工具()。你知道NancyFx是否可以解析JSON,如果可以的话,你能在你的答案中添加一个反序列化JSON输入的代码示例,这样这个问题就可以回到正轨了吗?你是对的-“this.Bind()”将请求的主体反序列化为“order”,这非常简洁。Nancy使用JSON.Net作为默认的JSON解析器,而ASP.NETMVC4在默认情况下也将使用JSON.Net。另一种选择是ServiceStack,但我自己对Json.net一直很熟悉。这个链接不再有效。你能把相关信息放在这里吗?
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); 
                };
            }       
        }