2016-06-23 1 views
2

Je suis nouveau à la désérialisation JSON et me gratte la tête à la recherche d'une solution. J'ai cherché de nombreuses solutions en ligne, mais aucune d'elles ne sert mon but.Comment désérialiser JSON et le mapper à un objet chaîne

J'ai cet exemple des données JSON que je reçois d'un serveur Web:

[943533322,"2016-06-23 02:34:38","1.1","gsQA-telem-pin-test-00","defaultTitleIdType","defaultReleaseT","defaultBuildVersion","14.1.3","2016-06-23 03:34:38","8037412060430813886","pc","telem_test","159.153.136.116","defaultMac","default","{\"defaultCSH\":[{\"defaultCSH1\":1},{\"defaultCSH2\":2}]}","defaultLevel","boot_start",0,"defaultPlayerIdType","defaultPlayerId","2016-06-23 03:34:38","defaultDOB","defaultExperimentId","{\"defaultPIDM\":[{\"defaultPIDM1\":1},{\"defaultPIDM3\":4}]}","{\"defaultDIDM\":[{\"defaultDIDM1\":2},{\"defaultDIDM3\":4}]}",null,"{\"status\":\"boot_start_event\",\"custom\":{\"defaultCEH\":[{\"defaultCEH1\":1},{\"defaultCEH2\":2}]}}",16975,"{\"x-ea-game-id-type\":\"\\\"defaulttitleidtype\\\"\",\"x-ea-taxv\":\"\\\"1.1\\\"\",\"x-ea-env\":\"\\\"test\\\"\",\"x-ea-game-id\":\"\\\"gsqa-telem-pin-test-00\\\"\",\"x-ea-uid\":null,\"x-ea-app-type\":null,\"application-id\":null}"] 

Je veux désérialiser les valeurs à un objet de type chaîne dans ce format:

id | serverTS | taxv | tid | tidt | rel | v | sdkv | ts_post | s_id | plat | et | clientIP | mac | loc | custom | lev | en | s | pidt | pid | ts_event | dob | exid | pidm | didm | event_custom | event_params | dt_part | http_header 

Tous les exemples J'ai regardé en ligne sont pour JSON dans le format de

{ 
    "id":"943533322", 

    "serverTS":"2016-06-23 02:34:38", 

    ... 

} 

Mais comment puis-je deseriali ze JSON qui est dans le format

Toutes les suggestions et l'aide seront vraiment appréciées. Merci d'avance.

+1

Vous êtes chaîne JSON est invalide. Vous pouvez le tester ici: http://json.parser.online.fr/ –

+0

Pourquoi deux tags? C# ou C++? – tttony

+0

désolé je n'ai pas mis le json entier. Doit avoir fait une sorte d'erreur en raccourcissant. J'utilise des bibliothèques .net. Donc je suppose que la balise correcte serait C++ –

Répondre

1

Votre réponse Web est un tableau json, pas un objet json, vous devez donc extraire et analyser chaque partie individuellement. Json.Net Est probablement l'option la plus populaire en C#. Vous devrez définir des types pour chaque autre type d'objet que le tableau contient (y compris les objets enfants), mais s'il s'agit d'objets POCO avec des propriétés publiques, c'est essentiellement fait automatiquement.

JArray array = JArray.Parse(jsonString); 
List<object> parts = new List<object>(); 
JArray array = JArray.Parse(jsonString); 
parts.Add(array[0].ToObject<int>()); 
parts.Add(array[1].ToObject<DateTime>()); 
.... 
string formattedString = string.Join("|", parts); 

Si vous pouvez obtenir le service Web pour vous donner un objet JSON au lieu du tableau, il devient beaucoup plus facile à désérialiser.

Si vous ne dérange pas d'avoir les objets-enfant encore au format JSON dans le tableau, vous pouvez aussi faire simplement:

formattedString=string.join("|",array);