2010-08-12 27 views
1

,所以我正從谷歌的迴應翻譯API的是這樣的:JavaScriptSerializer發出

"{\"responseData\": {\"translatedText\":\"Hola Mi nombre es\"}, \"responseDetails\": null, \"responseStatus\": 200}" 

我的代碼如下所示:

private string getText(string response) 
    { 
     var serializer = new JavaScriptSerializer(new SimpleTypeResolver()); 
     translationReturnObject obj = serializer.Deserialize<translationReturnObject>(response); 

     return obj.translatedText; 
    } 

與translationReturnObject這樣定義:

[DataContract] 
class translationReturnObject 
{ 
    [DataMember(Name = "responseData")] 
    public string repsonseData { get; set;} 

    [DataMember(Name = "translatedText")] 
    public string translatedText { get; set; } 

    [DataMember(Name = "responseDetails")] 
    public string responseDetails { get; set; } 

    [DataMember(Name = "responseStatus")] 
    public string responseStatus { get; set; } 

} 

我的問題是,翻譯文本沒有得到正確的反序列化。無論返回的語言是什麼(所以我不認爲這是一個編碼問題),值爲空。

關於我在做什麼的錯誤?

+0

爲什麼怪異的命名con? – marr75 2010-08-12 14:46:36

+0

它有什麼奇怪的?不知道你在做什麼。 – Alex 2010-08-12 14:58:47

回答

3

如果你看看返回的JSON,你會看到translatedText屬性responseData。因此,你需要以下:

public class TranslationResponseData 
{ 
    public string translatedText { get; set; } 
} 

public class TranslationReturnObject 
{ 
    public TranslationResponseData repsonseData { get; set;} 
    public string responseDetails { get; set; } 
    public string responseStatus { get; set; } 
} 

編輯:另外,您不必擔心DataContract/DataMemberJavaScriptSerializer將把JSON名稱映射到公共屬性名稱。

+0

非常感謝你,這確實是問題,你的修復工作。對不起,如果它看起來像一個n00b錯誤,但在JSON我是一個n00b。 – Alex 2010-08-12 14:56:57

+0

@Alex - 不用擔心。在分析JSON時,你必須特別小心,特別是如果你不創建它。 – TheCloudlessSky 2010-08-12 15:46:58

+0

在這種情況下,他不必擔心datacontract和datamember,但是如果他想重命名某些屬性進行序列化或排除一些屬性,他會需要它。 – richard 2014-01-24 05:51:55

0

我不認爲JavaScriptSerializer適用於DataContract和DataMember屬性。你嘗試過使用DataContractSerializer類嗎?

JavaScriptSerializer使用屬性名稱本身。它被棄用,但由於某種原因復活了MVC。 DataContractSerializer與WCF一起發佈。

+0

我不認爲'JavaScriptSerializer'曾經被棄用...... – TheCloudlessSky 2010-08-12 14:44:49

+0

事實上它確實有效,CloudlessSky指出它可能不是必需的,但它對所有其他的東西都沒問題。當然,我現在已經刪除了它,因爲它不是必需的,所以它更具可讀性。我得到了另一個stackoverflow答案,這是他們如何做,所以我認爲這是必要的。 – Alex 2010-08-12 15:00:54

+0

@TheCloudlessSky我認爲它是在3.5,然後在3.5 SP1不推薦見這裏http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method -using-net-3-5.aspx斯科特在評論中提到它。我曾嘗試將它與DataMembers最初一起使用,並完全忽略它們。也許我做錯了什麼。 – madcapnmckay 2010-08-12 21:18:21