2017-07-07 38 views
1

我使用Google翻譯API檢測字符串的語言。 API正在返回這個JSON:使用C#反序列化Google翻譯API中的JSON

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

我還沒有找到反序列化它的方式。我使用System.Runtime.Serialization,這是我的代碼:

[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))); 

我得到這個結果:

Confidence: 0 
IsReliable:false 
Language:null 
+1

您正在使用什麼代碼來嘗試進行反序列化? –

+2

'「檢測」'是一個數組數組。你需要使用列表清單進行建模嗎? –

+0

@Brian Rogers我更新了這個問題。 –

回答

3

在你的JSON的"detections"值是一個二維交錯數組:

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

因此你的模型需要通過使用嵌套集合,以反映這一點:

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