2011-02-03 5 views
1

OK, je suis complètement nouveau à JSON et Json.NET - alors s'il vous plaît pardonnez mon ignorance; J'essaye d'analyser une chaîne qui provient d'une requête GET en quelque chose d'utile pour moi dans une application C#.Analyse des objets JSON imbriqués à partir d'une chaîne JavaScript

La chaîne contient une structure avec des objets JSON imbriqués. Les objets du premier niveau ont des codages UTF-8 comme \u0040 et des caractères d'échappement comme \. Le niveau suivant contient un autre objet JSON imbriqué avec double caractères d'échappement comme \\ et ainsi de suite (jusqu'à 5 caractères d'échappement!) ..

Il contient également " représentations de guillemets comme ».

Ma première assumtion est Il s'agit d'objets JSON imbriqués Comment puis-je analyser ces objets imbriqués en quelque chose d'utile pour interroger, par exemple, LINQ? Dois-je écrire la logique moi-même, ou y at-il une fonction intéressante dans JSON.NET? déjà? Les premiers octets de la chaîne pour aider à clarifier:

{\"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\\\":[],\\ 

Je vous remercie de votre aide, les gens;)

+1

FYI il y a un sérialiseur/désérialiseur JSON entièrement fonctionnel dans le FCL. http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx –

Répondre

0

Si vous connaissez le contrat de l'objet que vous avez, créez une classe C# POCO/classes avec les mêmes contrats et désérialiser votre JSON avec JsonSerializer.Deserialize. Si le contrat est inconnu, essayez JObject.Parse(jsonString) et des méthodes comme Values() et PropertyValues vous renverront votre collection, vous pouvez interroger avec LINQ.

-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"); 
Questions connexes