2012-11-06 8 views
2

J'ai jeté un oeil à quelques threads, mais ce que je vise, je n'arrive pas à trouver.
Je les chaînes JSON suivantes retourné:Désérialisation JSON dans .NET

En cas de succès:

{"success":{"username":"key"}} 

On Error:

{"error":{"type":101,"address":"/","description":"link button not pressed"}} 

je dois pouvoir désérialiser ceux-ci dans une classe et déterminer si J'ai une erreur ou un message de réussite pour continuer à le faire. Des idées sur la façon d'y parvenir?

grâce,

Adam

+0

Allez-vous faire quelque chose avec l'objet en plus de vérifier son type? – iMortalitySX

+0

@iMortalitySX Obtenez le nom d'utilisateur? –

Répondre

1

Pas besoin de déclarer beaucoup de minuscules classes. dynamic mot-clé peut aider ici.

dynamic jObj = JObject.Parse(json); 
if (jObj.error!= null) 
{ 
    string error = jObj.error.description.ToString(); 
} 
else 
{ 
    string key = jObj.success.username.ToString(); 
} 
1

Une option consiste à utiliser http://nuget.org/packages/newtonsoft.json - vous pouvez créer votre propre classe personnalisée désérialiser dans ou utiliser dynamic comme type de cible.

var result = JsonConvert.DeserializeObject<Result>(jsonString); 

class Result 
{ 
    public SuccessResult success { get; set; } 
    public ErrorResult error { get; set; } 
} 

class SuccessResult 
{ 
    public string username { get; set; } 
} 

class ErrorResult 
{ 
    public int type { get; set; } 
    public string address { get; set; } 
    public string description { get; set; } 
} 

Si vous avez juste besoin de vérifier le succès, il est possible de vérifier simplement result.StartsWith("{\"success\":") pour éviter l'analyse syntaxique inutile. Mais cela ne devrait être fait que si vous avez la garantie que la chaîne JSON sera toujours exactement comme cela (pas d'espaces supplémentaires, etc.) - donc c'est habituellement approprié seulement si vous possédez la génération JSON vous-même.

+1

Wow ... J'ai presque mis à jour, mais vous avez ensuite suggéré de ne pas analyser le JSON et d'attendre une chaîne très spécifique qui échouerait si la création JSON ajoutait des espaces n'importe où. Tenté de voter pour cette raison ... –

+0

cela dépend toujours de la situation - si vous êtes sûr de savoir comment la chaîne JSON est générée, alors vous pouvez le faire. éditera la réponse pour inclure le bon avertissement –

+1

Veuillez ne pas coder ou suggérer attendre un format JSON spécifique, ce n'est pas JSON dans ce cas, c'est votre propre mise en forme qui imite JSON et peut casser en essayant d'interagir avec JSON. Vous demandez des problèmes d'incompatibilité sur la route si vous faites cela. Rappelez-vous que la plupart des générateurs JSON vous donnent l'option d'impression jolie pour le débogage –

0

Cette réponse couvre la plupart des options, y compris le matériel de votre propre analyseur et en utilisant JSON.Net:

Parse JSON in C#

Vous pouvez aussi simplement écrire une expression régulière si le format va être aussi simple que cela ...

+0

Ensuite, vous devriez marquer cet article comme un doublon –