2011-08-20 3 views
-1

J'utilise la bibliothèque System.Runtime.Serialization.JsonC# Parse JSON - System.Runtime.Serialization.Json

Cela ne fonctionne pas

public class Detections 
      { 
       [DataContract] 
       public class RootObject 
       { 
        [DataMember(Name = "data")] 
        public DataObject Data { get; set; } 
       } 

       [DataContract] 
       public class DataObject 
       { 
        [DataMember(Name = "detections")] 
        public List<Detection> Detections { get; set; } 
       } 

       [DataContract] 
       public class Detection 
       { 
        [DataMember(Name = "language")] 
        public string Language { get; set; } 
        [DataMember(Name = "isReliable")] 
        public string IsReliable { get; set; } 
        [DataMember(Name = "confidence")] 
        public string Confidence { get; set; } 
       } 
      } 

Alors, comment dois-je analyser cette

{ 
    "data": { 
     "detections": [ 
     [ 
     { 
     "language": "tr", 
     "isReliable": false, 
     "confidence": 0.086520955 
     } 
     ] 
     ] 
    } 
    } 
+1

Pouvez-vous clearifier ce que vous entendez par "ne pas travailler"? Que se passe-t-il lorsque vous exécutez le code, et en quoi cela diffère-t-il de ce que vous attendiez? Avez-vous un message d'erreur? – Guffa

+0

Je ne sais pas à quel point le sérialiseur Json est difficile, avez-vous essayé des choses comme utiliser bool pour isReliable au lieu de chaîne. – ForbesLindesay

Répondre

5

Le problème survient pour deux raisons.

1) Vos classes imbriquées devaient être supprimées de la classe Detections.

2) Le JSON contient un tableau multidimensionnel pour le membre de détections où je suppose qu'il doit être unique.

J'ai testé le code détaillé ci-dessous cela fonctionne très bien.

//Classes 

[DataContract] 
public class RootObject 
{ 
    [DataMember(Name = "data")] 
    public DataObject Data { get; set; } 
} 

[DataContract] 
public class DataObject 
{ 
    [DataMember(Name = "detections")] 
    public List<Detection> Detections { get; set; } 
} 

[DataContract] 
public class Detection 
{ 
    [DataMember(Name = "language")] 
    public string Language { get; set; } 
    [DataMember(Name = "isReliable")] 
    public string IsReliable { get; set; } 
    [DataMember(Name = "confidence")] 
    public string Confidence { get; set; } 
} 

//Code to deserialize 

var serializer = new DataContractJsonSerializer(typeof(RootObject)); 
var json = "{\"data\": {\"detections\": [{\"language\": \"tr\",\"isReliable\": false,\"confidence\": 0.086520955}]}}"; 
var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); 
var rootObject = serializer.ReadObject(stream); 
stream.Close(); 

J'espère que cela vous aide.

+0

Veuillez noter que ses données json diffèrent des données utilisées dans votre exemple. "Detections" a double [[en face de cela. –

0

Tout est correct sauf que Detections est une collection de collections. Je ne sais pas pourquoi c'est comme ça mais ça marche pour moi.

[DataContract] 
public class DataObject 
{ 
    [DataMember(Name = "detections")] 
    public List<List<Detection>> Detections { get; set; } 
} 
0

Dans votre json "Détection" est une liste de listes. Veuillez noter que la réponse de jdavies ne le reconnaît pas.

[DataContract] 
public class DataObject 
{ 
[DataMember(Name = "detections")] 
public List<List<Detection>> Detections { get; set; } 
}