JsonConvert.DeserializeObject<T>(JsonString)将所有Properties<T>返回为Null。

3

我在将JSON字符串转换为C#对象时遇到了一些问题。这是一个非常基本的问题,但是我没有得到预期的输出结果。我做错了什么?

以下是我的字符串(由Google授权服务器提供):

 {
   "access_token" : "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
   "token_type" : "Bearer",
   "expires_in" : 3600,
   "refresh_token" : "yyyyyyyyyyyyyyyyyyyyyyy"
 }

以下是类的代码:

public class GoogleAuthProperty
{
    public string AccessToken { get; set; }
    public string TokenType { get; set; }
    public long ExpiredIn { get; set; }
    public string RefreshToken { get; set; }
}

我正在做这件事情:
var prop = JsonConvert.DeserializeObject<GoogleAuthProperty>(responseFromServer);

但是在prop的属性列表中没有获取到任何值。

prop.AccessToken is null;
prop.ToeknType is null;
prop.ExpiredIn is 0;
prop.RefreshToken is null;

参考资料:

Newtonsoft.Json
Version: 4.5.0.0

我不知道应该如何将 expires_in 映射到 ExpiredIn :-) - xanatos
尝试使用下面这个链接,它对我有用:http://stackoverflow.com/questions/33169825/jsonconvert-deserializeobject-returns-null - A Bright Worker
1个回答

15
由于下划线的存在,您在JSON中的属性名称与类中的属性名称不匹配,因此您正在获取默认值。 您可以通过在类中修饰属性并指定在JSON中使用的属性名称的JsonProperty属性来解决这个问题。
将此类用于反序列化。
public class SampleResponse
{
    [JsonProperty("access_token")]
    public string AccessToken { get; set; }

    [JsonProperty("token_type")]
    public string TokenType { get; set; }

    [JsonProperty("expires_in")]
    public int ExpiresIn { get; set; }

    [JsonProperty("refresh_token")]
    public string RefreshToken { get; set; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接