从JavaScript字符串中解析嵌套的JSON对象

时间:2011-02-03 16:22:25

标签: c# json.net

好的,我对JSON和Json.NET都很陌生 - 所以请原谅我的无知;

我正在尝试将来自GET请求的字符串解析为C#应用程序中对我有用的东西。

该字符串包含具有嵌套JSON对象的结构。第一级上的对象具有UTF-8编码,如\u0040和转义字符,如\。下一级包含另一个嵌套的JSON对象,其中有两个转义字符,如\\等等(最多5个转义字符!)..

它还包含引号的"表示,例如“。

我的第一个假设是这些是嵌套的JSON对象。如何将这些嵌套对象解析成对我来说有用的东西,例如LINQ?我是否必须自己编写逻辑,或者在Json.NET中是否有一个很好的功能呢? 字符串的第一个字节有助于澄清:

{\"phase\":2,\"id\":\"pagelet_search_results\",\"is_last\":true,\"css\":[\"Jo2rQ\",\"pxy5B\"],\"js\":[\"tVaAM\",\"rLVa6\",\"FJ3LF\"],\"resource_map\":{\"FJ3LF\":{\"type\":\"js\",\"src\":\"http:\\/\\/e.static.ak.fbcdn.net\\/rsrc.php\\/y8\\/p\\/r\\/1NVEOfjbXp5.js\"},\"pxy5B\":{\"type\":\"css\",\"permanent\":1,\"src\":\"http:\\/\\/f.static.ak.fbcdn.net\\/rsrc.php\\/yc\\/r\\/9H-KBGVNlw_.css\"}},\"onload\":[\"window.__UIControllerRegistry[\\\"c4d4ab726887b68c58602753\\\"] = new UIPagelet(\\\"c4d4ab726887b68c58602753\\\", \\\"\\\\\\/pagelet\\\\\\/generic.php\\\\\\/SearchObjectResultsPagelet\\\\\\/\\\", {\\\"params\\\":{\\\"viewerContext\\\":{\\\"userID\\\":123454549,\\\"accountID\\\":123454549,\\\"appID\\\":0,\\\"isOmnipotent\\\":false,\\\"isAuthenticated\\\":true,\\\"accessTokens\\\":[],\\\"instanceKey\\\":\\\"1254318719\\\\\\/1256318759\\\\\\/0\\\",\\\"originalViewerContext\\\":null,\\\"__index\\\":5,\\\"__sampleId\\\":null,\\\"__next\\\":-808,\\\"__state\\\":4,\\\"__preparer\\\":{\\\"runnablePreparables\\\":[],\\\"newRunnablePreparables\\\":[],\\\"blockedPreparables\\\":[],\\\"isRunning\\\":false,\\\"current\\\":null,\\\"isSequential\\\":false,\\\"round\\\":4,\\\"index\\\":3},\\\"__addedPreparers\\\":{\\\"3\\\":{\\\"runnablePreparables\\\":[],\\\"newRunnablePreparables\\\":[],\\\"blockedPreparables\\\":[],\\\"isRunning\\\":false,\\\"current\\\":null,\\\"isSequential\\\":false,\\\"round\\\":4,\\\"index\\\":3}},\\\"__siblings\\\":[],\\\"__children\\\":[],\\\"__ancestors\\\":[],\\

我感谢你的帮助,伙计们;)

2 个答案:

答案 0 :(得分:0)

如果您知道所获对象的合约,请使用相同的合约创建一个C#POCO类/类,并使用JsonSerializer.Deserialize反序列化您的JSON。 如果合同未知,请尝试JObject.Parse(jsonString)Values()PropertyValues等方法将返回您可以使用LINQ查询的集合。

答案 1 :(得分:-1)

using Newtonsoft.Json;
using Newtonsoft.Json.Ling;

.....


string js = "{\"phase\":2,\"id\":\"pagelet_search_results\"}";    
JObject jo = JObject.Parse(jsonString);
int phase = (int)jo.SelectToken("phase");
string id = (string)jo.SelectToken("id");
相关问题