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

Sub*_*kar 3 json.net c#-4.0

我在将JSON字符串转换为C#对象时遇到问题.非常基本但没有得到所需的输出.我做错了什么?

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

 {
   "access_token" : "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
   "token_type" : "Bearer",
   "expires_in" : 3600,
   "refresh_token" : "yyyyyyyyyyyyyyyyyyyyyyy"
 }
Run Code Online (Sandbox Code Playgroud)

这是班级:

public class GoogleAuthProperty
{
    public string AccessToken { get; set; }
    public string TokenType { get; set; }
    public long ExpiredIn { get; set; }
    public string RefreshToken { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我这样做:

var prop = JsonConvert.DeserializeObject<GoogleAuthProperty>(responseFromServer);
Run Code Online (Sandbox Code Playgroud)

但没有在属性列表中获取任何值 prop

prop.AccessToken is null;
prop.ToeknType is null;
prop.ExpiredIn is 0;
prop.RefreshToken is null;
Run Code Online (Sandbox Code Playgroud)

参考:

Newtonsoft.Json
Version: 4.5.0.0
Run Code Online (Sandbox Code Playgroud)

Man*_*vik 14

JSON中的属性名称与类中的属性名称不匹配(因为下划线),因此您将获得默认值.您可以通过使用属性修饰类中的JsonProperty属性并指定JSON中使用的属性名来解决此问题.

使用此类进行反序列化

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; }
}
Run Code Online (Sandbox Code Playgroud)