2015-11-17 1 views
-2

J'ai Json:Ne peut pas désérialiser le tableau JSON en cours (par exemple [1,2,3])

[ 
    [ 
     [ 
      { 
       "origin": [ 
        -15.2941064136735, 
        -0.43948581648487, 
        4.83674058264479 
       ], 
       "dimensions": [ 
        10.4597624323399, 
        11.6903227184975, 
        9.67348116528958 
       ], 
       "primitive": "block" 
      } 
     ], 
     [ 
      { 
       "origin": [ 
        -15.2941064136735, 
        -0.43948581648487, 
        4.83674058264479 
       ], 
       "dimensions": [ 
        10.4597624323399, 
        11.6903227184975, 
        9.67348116528958 
       ], 
       "primitive": "block" 
      } 
     ], 
     [ 
      { 
       "origin": [ 
        -15.2941064136735, 
        -0.43948581648487, 
        4.83674058264479 
       ], 
       "dimensions": [ 
        10.4597624323399, 
        11.6903227184975, 
        9.67348116528958 
       ], 
       "primitive": "block" 
      } 
     ] 
    ] 
] 

Et pour ce modèle JSON:

public class BoxConverter 
    { 
     [JsonProperty("origin")] 
     public List<double> Origin { get; set; } 

     [JsonProperty("dimensions")] 
     public List<double> Dimensions { get; set; } 

     [JsonProperty("primitive")] 
     public string Primitive { get; set; } 
    } 

Et je tente obtenir la liste des objets de json qui dans le fichier.

string strLocal = File.ReadAllText("2.txt"); 
var convertLocal = JsonConvert.DeserializeObject<List<BoxConverter>>(strLocal); 

Mais j'ai une exception:

peut désérialiser le tableau JSON en cours (par exemple [1,2,3]) dans le type parce que le type a besoin d'un objet JSON (par exemple { » name ":" value "}) pour désérialiser correctement.

Pour corriger cette erreur soit modifier le JSON à un objet JSON (par exemple { « name »: « valeur »}) ou modifier le type désérialisé à un tableau ou un type qui implémente une interface de collecte (par exemple ICollection, IList) like Liste pouvant être désérialisée à partir d'un tableau JSON. JsonArrayAttribute peut également être ajouté au type pour le forcer à désérialiser à partir d'un tableau JSON.

Path '[0]', ligne 1, 2.

Ce que je fais mal?

MISE À JOUR

Avec ce travail JSON parfaitement:

[{"attributes":{"materialProperties":{"color":"red","wireframe":false}},"dimensions":[10.4597624323399,11.6903227184975,9.67348116528958],"origin":[-15.2941064136735,-0.43948581648487,4.83674058264479],"primitive":"block"}] 
+0

« Origine »: [devrait probablement être « Origine » : {si je devrais prendre une estimation (mais pas 100%) – Thomas

+0

il semble qu'il y ait un autre tableau autour de l'ensemble. –

+0

http://stackoverflow.com/questions/17762032/cannot-deserialize-the-current-json-array-e-g-1-2-3-into-type Ceci n'est pas une réponse à ma question. –

Répondre

0

Votre JSON est un list of a list of a list of BoxConverter.

Vous devez faire ceci:

var convertLocal = JsonConvert.DeserializeObject<List<List<List<BoxConverter>>>>(strLocal) 

Votre BoxConverter classe est très bien.

Si votre json est emboîtée une quantité inconnue de temps (vous devriez probablement expliquer pourquoi cela est en premier lieu), vous pouvez le faire:

var superHack = JsonConvert.DeserializeObject<dynamic>(json); 
var currentObject = superHack; 
while(currentObject is JArray) 
    currentObject = currentObject[0]; 

var foundObject = currentObject as JObject; 
var convertLocal = foundObject.ToObject<BoxConverter>(); 
+0

Mais comment vérifier le compte de cette liste à l'intérieur de Json. Parce que le fichier peut contenir différents JSON avec un nombre différent de listes. –

+0

@VolodymyrGnatiuk Voir modification – Rob

+0

var foundObject = currentObject comme JObject; La référence d'objet n'est pas définie à une instance d'un objet. foundObject = null; –