2017-07-21 3 views
0

aidez-moi s'il vous plaît! J'essaie de lire un gros morceau de données à partir d'un fichier json et la plupart des données sont une liste de liste! Je ne sais pas comment le désérialiser!Unity Json De/sérialisation des données imbriquées

Je trouve ce guide, et a fait comme lui utilisant le JsonFX http://www.raybarrera.com/2014/05/18/json-deserialization-using-unity-and-jsonfx/

il m'a aidé à deserialize toutes les autres informations dont j'ai besoin sauf la liste de la liste. Ce qui suit est un exemple de la façon dont le fichier json peut ressembler, gardez à l'esprit que je l'ai simplifié dix plis, parce que c'est un énorme jeu de données!

{ 
    "name": "Croissant", 
    "price": 60, 
    "foo": [{ 
      "poo": [1, 2] 
     }, 
     { 
      "poo": [3, 4] 
     } 
    ], 
    "importantdata": [ 
     [ 
      0, 
      1, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0 
     ], 
     [ 
      1, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0, 
      0 
     ] 
    ] 
} 

Alors, comment puis-je faire cela en un objet et d'atteindre les données dont j'ai besoin comme ça myObject.importantdata[n]?

Si plus d'informations sont nécessaires, je suis heureux de partager, désolé, je suis nouveau ici!

+0

Votre JSON est invalide. Validez ici: https://jsonformatter.curiousconcept.com/ – Azeem

Répondre

1

Dans de tels cas, il est souvent préférable d'utiliser un site Web tel que http://json2csharp.com/

Coller dans votre JSON, cliquez sur générer et il vous donnera une liste des classes C# qui sont conformes à la structure de votre JSON.

Dans ce cas, il me donne

public class Foo 
{ 
    public List<int> poo { get; set; } 
} 

public class RootObject 
{ 
    public string name { get; set; } 
    public int price { get; set; } 
    public List<Foo> foo { get; set; } 
    public List<List<int>> importantdata { get; set; } 
} 

je puis personnellement utiliser NewtonSofts Json.net pour convertir à/de JSON comme celui-ci; http://www.newtonsoft.com/json

using Newtonsoft.Json; 


string json = File.ReadAllText("path\to\file.json"); 
RootObject myRootObject = JsonConvert.DeserializeObject<RootObject>(json); 
+1

Merci mon pote! J'ai d'abord pensé à utiliser les méthodes get et set, mais lisez sur unitydoc que jsonutility (que j'ai utilisé) ne supporte pas, donc j'ai dû m'adapter, mais cela m'a vraiment beaucoup aidé, maintenant je peux enfin atteindre ce que je veux atteindre! newtonsoft vient de sauver une vie, je pense –

0

Vous pouvez générer la classe POCO en utilisant vos données d'échantillons, essayez http://json2csharp.com/, qui est un outil en ligne. Visual Studio 2015 et le code VS a également un élément de menu/commande similaire pour accomplir ceci.

  • Collez votre chaîne JSON il
  • vous obtiendrez toutes les classes POCO dont vous avez besoin.

Le résultat généré automatiquement pour votre cas est:

public class Foo 
{ 
    public List<int> poo { get; set; } 
} 

public class RootObject 
{ 
    public string name { get; set; } 
    public int price { get; set; } 
    public List<Foo> foo { get; set; } 
    public List<List<int>> importantdata { get; set; } 
} 

exemple VS code: enter image description here

Visual Studio 2015 exemple: enter image description here