错误名称为“ token_type”的成员已存在JsonPropertyAttribute

时间:2018-07-28 11:57:16

标签: c# json json.net

//{"access_token":"myaccesstoken","expires_in":3600,"token_type":"Bearer"}
string responseString = null;
TokenResponse tokenResponse = new TokenResponse();
tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(responseString);

public class TokenResponse
{
    //
    // Summary:
    //     Gets the access token.
    [JsonProperty(PropertyName = "access_token")]
    public string AccessToken { get; set; }
    ////
    //// Summary:
    ////     Gets the identity token.
    //public string IdentityToken { get; }
    //
    // Summary:
    //     Gets the type of the token.
    [JsonProperty(PropertyName = "token_type")]
    public string TokenType { get; set; }
    //
    // Summary:
    //     Gets the refresh token.
    [JsonProperty(PropertyName = "token_type")]
    public string RefreshToken { get; set; }
    //
    // Summary:
    //     Gets the error description.
    [JsonProperty(PropertyName = "error_description")]
    public string ErrorDescription { get; set; }
    //
    // Summary:
    //     Gets the expires in.
    [JsonProperty(PropertyName = "expires_in")]
    public int ExpiresIn { get; set; }
}

异常错误消息

“在'app1.TokenResponse'上已经存在一个名为'token_type'的成员。使用JsonPropertyAttribute指定另一个名称。“

2 个答案:

答案 0 :(得分:1)

您两次应用了完全相同的属性(下一个),

[JsonProperty(PropertyName = "token_type")]

关于两个不同的属性。一次用于TokenType,一次用于RefreshToken。您的代码副本粘贴在下面:

// Summary:
//     Gets the type of the token.
[JsonProperty(PropertyName = "token_type")]  //<---
public string TokenType { get; set; }
//
// Summary:
//     Gets the refresh token.
[JsonProperty(PropertyName = "token_type")] //<---
public string RefreshToken { get; set; }

答案 1 :(得分:0)

在不同的上下文中,您有一个字段具有两种不同的含义。通常,这不是一种理想的数据格式,因为它会在另一端为用户增加混乱的逻辑。它们需要先了解“ Json”属性在每种情况下的含义。

也许您可以将它们添加到两个不同的类中:

   public class TokenRefresh
   {
    //Gets the type of the token.
    [JsonProperty(PropertyName = "token_type")]
     public string TokenType { get; set; }
   }
   public class TokenResponse
   { 
    //     Gets the refresh token.
     [JsonProperty(PropertyName = "token_type")]
      public string RefreshToken { get; set; }
   }