Deserializing of Google's Translate API result in C#

I'm trying to deserialize Google's Translate API JSON response into an C# object using JavaScriptSerializer. However, it always says Type 'TranslateAPI.Models.Translations' is not supported for deserialization of an array.. I double checked whether I have correctly created models for this object and it seems right. Here are my models:

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; }

The json returned from Google looks like this:

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

Any idea what I'm doing wrong?

Thanks

PS. It could be useful to mention, that I'm deserializing it like so: TranslateResult translateResult = js.Deserialize <TranslateResult>(json);

Jon Skeet
people
quotationmark

I suspect you don't need the Translations class at all. You've got:

  • An object containing a data property
  • The data property value is an object containing a translations property
  • The translations property value is an array
  • Each element of the array is an object with a translatedText property

So that sounds to me like your TranslateData class should be:

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

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

(I'd also recommend that you rename the properties to follow normal C# naming conventions, and then apply attributes to help with the JSON conversion if you need to. I haven't used JavaScriptSerializer for a while, but I'm sure it's feasible. You shouldn't need to work with nasty property names in your C# code.)

people

See more on this question at Stackoverflow