C# JavaScriptSerializer问题

C# JavaScriptSerializer问题,c#,C#,因此,我从google translate API得到的回应如下: "{\"responseData\": {\"translatedText\":\"Hola Mi nombre es\"}, \"responseDetails\": null, \"responseStatus\": 200}" [DataContract] class translationReturnObject { [DataMember(Name = "responseData")] public

因此,我从google translate API得到的回应如下:

"{\"responseData\": {\"translatedText\":\"Hola Mi nombre es\"}, \"responseDetails\": null, \"responseStatus\": 200}"
[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; }  

}
我的代码如下所示:

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

        return obj.translatedText;
    }
我的问题是translatedText未正确反序列化。无论返回的语言是什么(因此我认为这不是编码问题),该值都为null


你知道我做错了什么吗?

如果你查看返回的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
/
DataMember
JavaScriptSerializer
将JSON名称映射到公共属性名称。

我认为
JavaScriptSerializer
不适用于DataContract和DataMember属性。你试过使用这个课程吗


JavaScriptSerializer使用属性名本身。它被弃用了,但出于某种原因被重新用于MVC。DataContractSerializer是随WCF发布的。

非常感谢,这确实是问题所在,您的修复工作正常。抱歉,如果这看起来像是n00b错误,但在json中,我是n00b。@Alex-不用担心。在分析JSON时,尤其是在您没有创建JSON的情况下,您必须格外小心。在这种情况下,他不必担心datacontract和datamember,但如果他想重命名某些属性以进行序列化或排除某些属性,他将需要它。wierd对此有何看法?不知道你在想什么。事实上,它确实有效,正如Cloudlessky指出的,它可能不需要,但它与所有其他东西都很好。当然,我现在已经删除了它,以使它更可读,因为它是不需要的。我通过另一个stackoverflow答案达到了我所能达到的程度,他们就是这样做的,我认为这是必要的。@TheCloudssky我认为它在3.5中,然后在3.5 SP1中未被预测见这里scott在评论中提到了它。我最初尝试将它用于DataMembers,但它完全忽略了它们。也许我做错了什么。哇,接得好!我从来没有注意到它是。他们真是太蠢了,竟然反对它。很高兴它仍然使用框架!