0

JavaScriptSerializer를 사용하여 Google의 Translate API JSON 응답을 C# 객체로 비 직렬화하려고합니다. 그러나 그것은 항상 Type 'TranslateAPI.Models.Translations' is not supported for deserialization of an array.라고합니다. 이 오브젝트에 대한 모델을 올바르게 작성했는지 여부를 다시 한 번 확인하고 올바르게 보입니다. 여기 내 모델은 다음과 같습니다Google의 Translate API 결과를 C에서 역 직렬화

TranslateResult 
    public TranslateData data { get; set; } 

TranslateData 
    public Translations translations { get; set; } 

Translations 
    public TranslatedText[] translatedText { get; set; } // I have also tried List<TranslatedText> which also doesn't work 

TranslatedText 
    public string translatedText { get; set; } 

json으로 구글에서 반환은 다음과 같습니다

{data: { 
    translations: [ 
     {translatedText: "Hello world"} 
    ] 
} 

내가 잘못 어떤 생각?

감사

PS. 그것은 내가 그것을 deserialize하고 있다고 언급하는 것이 유용 할 수있다. TranslateResult translateResult = js.Deserialize <TranslateResult>(json);

답변

2

나는 Translations 클래스가 전혀 필요하지 않다고 생각한다. 당신이있어 :

  • data 속성을 포함하는 객체
  • data 속성 값은
  • translations 속성 값이
  • 이 배열의 각 요소는 배열을하는 translations 속성을 포함하는 객체입니다 translatedText 속성이있는 객체

저에게 들리는 소리는입니다.개 클래스는해야한다 :

TranslateData 
    public Translation[] translations { get; set; } 

Translation // Renamed from TranslatedText 
    public string translatedText { get; set } 

(나는 또한 당신이 정상적인 C#을 이름 지정 규칙을 따라야하는 속성의 이름을 변경하는 것이 좋습니다 한 다음에 필요하면 JSON 변환에 도움이 속성을 적용 할 것입니다. 잠시 동안 JavaScriptSerializer을 사용하지는 않았지만 가능성이 있다고 확신합니다. C# 코드에서 불쾌한 속성 이름으로 작업 할 필요가 없습니다.

+0

어떻게 그리울지 모르겠지만 ... 배열에 맞았습니다. 감사합니다! 또한 속성을 살펴보고 올바른 명명 규칙을 따릅니다. – leopik

+0

비슷한 문제가있는 사람들을 위해 - 나는 번역 (번역 [])을위한 배열이 아니라 TranslatedText []를위한 배열을 가지기로되어 있었다. – leopik

+0

이것은 일종의 오래된 스레드이지만 "번역"속성을 일반 목록 (목록 )으로 만들고 모든 일반적인 이점을 얻을 수도 있습니다! :) –