2010-11-13 8 views
1

Je suis désemparé, j'ai besoin de désérialiser la chaîne JSON dans ce format en classe.Déssérialisation JSON string avec JSON.NET

chaîne JSON:

{"newNickInfo":{"2775040":{"idUser":2775040,"nick":"minci88","sefNick":"minci88","sex":2,"photon":"http:\/\/213.215.107.125\/fotky\/277\/50\/n_2775040.jpg?v=4","photos":"http:\/\/213.215.107.125\/fotky\/277\/50\/s_2775040.jpg?v=4","logged":false,"idChat":0,"roomName":"","updated":1289670130}}} 

Classe:

public class User 
{ 
public string idUser{get;set;} 
public string nick{get;set;} 
public string sefNick{get;set;} 
public string sex{get;set;} 
public string photon{get;set;} 
public string photos{get;set;} 
public bool logged{get;set;} 
public int idChat{get;set;} 
public string roomName{get;set;} 
public string updated{get;set;} 
} 

Le premier problème est, les propriétés de classe doivent être minuscules, et le deuxième problème est que j'essaie bien des égards, mais je ne sais pas comment couper json objet de cette chaîne json et désérialiser en classe. Des idées? Merci pour toute aide.

Encore une question, quel format aurait C# class, si je veux désérialiser cette chaîne json dedans.

+0

Qu'avez-vous essayé et quels résultats avez-vous obtenus? –

Répondre

0
using System.Web.Script.Serialization; 

var serializer = new JavaScriptSerializer(); 
var deserialized = serializer.Deserialize<Dictionary<string, Dictionary<string, User>>>(theJsonString); 
var theUser = deserialized["newNickInfo"]["2775040"]; 
+0

Salut Domenic, votre solution ne fonctionne pas. Essayez, je reçois erreur de compilation: System.Collections.Generic.Dictionary > 'est un' type 'mais est utilisé comme une' variable ' –

+0

Oui, j'ai oublié une fermeture '>' ; Essayez-le maintenant. – Domenic

1

ressemble à votre chaîne JSON est incorrecte. Regardez ceci

string json = @"[ 

    { 
     "newNickInfo": "2775040", 
     "idUser": "2775040", 
     "nick":"minci88", 
     "sefNick":"minci88", 
     "sex":2, 
     "photon":"http:\/\/213.215.107.125\/fotky\/277\/50\/n_2775040.jpg?v=4", 
     "photos":"http:\/\/213.215.107.125\/fotky\/277\/50\/s_2775040.jpg?v=4", 
     "logged":false, 
     "idChat":0, 
     "roomName":"", 
     "updated":"1289670130" 
    } 
]"; 



public class User 
{ 
[JsonProperty] 
public string idUser{get;set;} 
[JsonProperty] 
public string nick{get;set;} 
[JsonProperty] 
public string sefNick{get;set;} 
[JsonProperty] 
public string sex{get;set;} 
[JsonProperty] 
public string photon{get;set;} 
[JsonProperty] 
public string photos{get;set;} 
[JsonProperty] 
public bool logged{get;set;} 
[JsonProperty] 
public int idChat{get;set;} 
[JsonProperty] 
public string roomName{get;set;} 
[JsonProperty] 
public string updated{get;set;} 
} 


List<User> users = JsonConvert.DeserializeObject<List<User>>(json); 

User u1 = users[0]; 

Console.WriteLine(u1.nick); 
+0

Bonjour, utilisez le validateur JSONLint, la chaîne est ok http://www.jsonlint.com/. Essayez-le. –

0

J'utilise cet outil Jsonclassgenerator. Il pourrait générer des classes C# pour la chaîne Json d'entrée. Vous n'avez pas besoin d'utiliser la classe exacte générée. Mais vous pouvez voir le format de la classe et en créer un similaire dans votre projet.

+0

Soyez prudent lorsque vous postez copiez et collez les réponses standard (http://stackoverflow.com/questions/4575445/c-sharp-class-to-parse-json-result/7996810#7996810) à plusieurs questions, celles-ci ont tendance à être marqué comme "spam" par la communauté. – Kev

Questions connexes