2017-07-07 1 views
1

Ich verwende Google Translation API, um eine Sprache einer Zeichenfolge zu erkennen. Die API gibt diesen JSON zurück:Deserialisieren eines JSON aus der Google-Übersetzungs-API mithilfe von C#

{ 
    "data": { 
     "detections": [ 
      [ 
       { 
        "confidence": 0.37890625, 
        "isReliable": false, 
        "language": "ro" 
       } 
      ] 
     ] 
    } 
} 

Ich habe immer noch nicht den Weg der Deserialisierung gefunden. Ich verwende System.Runtime.Serialization und dies ist mein Code:

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

[DataContract] 
public class Detection 
{ 
    [DataMember(Name = "confidence")] 
    public decimal Confidence { get; set; } 

    [DataMember(Name = "isReliable")] 
    public bool IsReliable { get; set; } 

    [DataMember(Name = "language")] 
    public string Language { get; set; } 
} 
// ... 
var jsonSerializer = new DataContractJsonSerializer(typeof(GoogleTranslationResponse)); 
result = (GoogleTranslationResponse)jsonSerializer.ReadObject(new MemoryStream(Encoding.Unicode.GetBytes(responseData))); 

Ich erhalte diese als Ergebnis:

Confidence: 0 
IsReliable:false 
Language:null 
+1

Welchen Code verwenden Sie, um die Deserialisierung durchzuführen? –

+2

'" detections "' ist ein Array von Arrays. Müssen Sie das anhand einer Liste von Listen modellieren? –

+0

@ Brian Rogers Ich habe die Frage aktualisiert. –

Antwort

3

In Ihrem JSON, wird der Wert von "detections" ist ein 2D gezackter Array:

"detections": [ [ { ... } ] ] 

Deshalb Ihr Modell muss dies widerzuspiegeln durch verschachtelte Sammlungen mit:

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