2009-10-26 4 views
0

J'interroge un service Web qui a été créé par un autre développeur. Il renvoie un jeu de résultats au format JSON. Je reçois trois valeurs de la colonne (je sais déjà ce que la position ordinale de chaque colonne signifie):Meilleure façon de désérialiser une chaîne longue (réponse d'un service Web externe)

[["Boston","142","JJK"],["Miami","111","QLA"],["Sacramento","042","PPT"]] 

En réalité, cet ensemble de résultats peut être des milliers de dossiers longue.

Quelle est la meilleure façon d'analyser cette chaîne?

Je suppose qu'un désérialiseur JSON serait bien, mais qu'est-ce qu'un bon à utiliser dans C# /. NET? Je suis sûr que le sérialiseur System.Runtime.Serialization.Json ne fonctionnera pas.

Répondre

1

Utilisation du construit dans les bibliothèques pour asp .net (System.Runtime.Serialization et System.ServiceModel.Web) vous pouvez obtenir ce que vous voulez assez facilement:

string[][] parsed = null; 
var jsonStr = @"[[""Boston"",""142"",""JJK""],[""Miami"",""111"",""QLA""],[""Sacramento"",""042"",""PPT""]]"; 
using (var ms = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(jsonStr))) 
{ 
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(string[][])); 
    parsed = serializer.ReadObject(ms) as string[][]; 
} 

un petit exemple plus complexe (qui était ma première réponse) d'abord une classe factice à utiliser pour la sérialisation Il vient. a besoin d'un membre pour tenir le résultat qui devrait être de ty chaîne de pe [] [].

[DataContract] 
public class Result 
{ 
    [DataMember(Name="d")] 
    public string[][] d { get; set; } 
} 

Ensuite, il est aussi simple que l'emballage de votre résultat comme autant: { "d": /your results/ }. Voir ci-dessous pour un exemple:

Result parsed = null; 
var jsonStr = @"[[""Boston"",""142"",""JJK""],[""Miami"",""111"",""QLA""],[""Sacramento"",""042"",""PPT""]]"; 
using (var ms = new MemoryStream(Encoding.Default.GetBytes(string.Format(@"{{ ""d"": {0} }}", jsonStr)))) 
{ 
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Result)); 
    parsed = serializer.ReadObject(ms) as Result; 
} 
+0

THanks, votre exemple simple a bien fonctionné. Je n'ai pas besoin des trucs complexes - mais bon à savoir. –

1

Que diriez-vous de this?

+0

Cela a fonctionné, mais je vais essayer les autres méthodes aussi. –

+0

Veuillez ne pas nouer. Inclure un titre et un extrait applicables. –

0

Il semble que vous ayez un format assez simple pour lequel vous pouvez écrire un analyseur personnalisé, puisque vous ne voulez pas toujours attendre qu'il analyse et renvoie tout ce qu'il contient avant de l'utiliser.

Je voudrais juste écrire un analyseur récursif qui recherche les jetons « [ », », « « \ » », et « ] » et fait la meilleure chose.

+0

Est-ce simple? Pouvez-vous fournir des liens ou des exemples de code? –

Questions connexes