c# - 反序列化 Json 无法使用 NewtonSoft 将字符串转换为对象
问题描述
{
"access_token":"asfdasfdsf",
"token_type":"bearer",
"expires_in":15179999,
"refresh_token":"sdsfsf",
".issued":"Sat, 28 Apr 2018 03:05:12 GMT",
".expires":"Sat, 20 Oct 2018 19:45:12 GMT",
"ip_address":"111.111.11.1",
"client_id":"asdsdfsf",
"user":"{\r\n \"Active\": true,\r\n \"DisplayName\": \"Sakib Hasan\",\r\n \"Email\": \"test@testc.om\",\r\n \"EmailVarified\": true,\r\n \"Language\": \"en-US\",\r\n \"PhoneNumber\": null,\r\n \"ProfileImageUrl\": null,\r\n \"Roles\": [\r\n \"anonymous\",\r\n \"admin\"\r\n ],\r\n \"TenantId\": \"asfsf\",\r\n \"UserName\": \"test@testc.com\",\r\n \"FirstName\": null,\r\n \"UserSignup\": false,\r\n \"ProfileImageId\": null,\r\n \"EverLoggedIn\": true,\r\n \"PersonIdentifier\": null,\r\n \"UserId\": \"sdfsff\"\r\n}",
"may_access":""
}
我正在尝试将上述字符串反序列化为我的 C# 对象。我的课程如下所示
internal class TokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
[JsonProperty("client_id")]
public string ClientId { get; set; }
[JsonProperty("user")]
public TokenUser User { get; set; }
}
internal class TokenUser
{
[JsonProperty("DisplayName")]
public string DisplayName { get; set; }
[JsonProperty("Email")]
public string Email { get; set; }
[JsonProperty("ProfileImageUrl")]
public string ProfileImageUrl { get; set; }
[JsonProperty("UserName")]
public string UserName { get; set; }
[JsonProperty("FirstName")]
public string FirstName { get; set; }
[JsonProperty("UserId")]
public string UserId { get; set; }
}
现在当我尝试使用 Newtonsoft 反序列化
tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(jsonTokenResponse);
我得到无法将字符串转换为用户错误。我在这里错过了什么吗?
解决方案
像这样试试
internal class TokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
[JsonProperty("client_id")]
public string ClientId { get; set; }
[JsonProperty("user")]
public string User { get; set; }
[JsonIgnore]
public TokenUser UserToken { get; set; }
}
internal class TokenUser
{
[JsonProperty("DisplayName")]
public string DisplayName { get; set; }
[JsonProperty("Email")]
public string Email { get; set; }
[JsonProperty("ProfileImageUrl")]
public string ProfileImageUrl { get; set; }
[JsonProperty("UserName")]
public string UserName { get; set; }
[JsonProperty("FirstName")]
public string FirstName { get; set; }
[JsonProperty("UserId")]
public string UserId { get; set; }
}
tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(jsonTokenResponse);
tokenResponse.UserToken = JsonConvert.DeserializeObject<TokenUser>(tokenResponse);
因为您的用户属性在期待 TokenUser 时得到一个字符串
推荐阅读
- c++ - C++ 2D 图形:平底三角形光栅化
- microsoft-graph-api - Microsoft Graph API:按位置筛选日历事件
- javascript - Angular 8 : why execution of getcartorCreate() method break after execute the this.id = await this.getServer();
- java - CRUD 存储库的所有方法都返回 null
- reactjs - 如何适应边界和中心反应谷歌地图
- python - 属性错误:“嵌入”对象没有属性“嵌入”-TensorFlow 和 Keras
- c++ - 将带空格的文本转换为驼峰式
- python - 如何在matplotlib中重新定位x轴以设置为0
- reactjs - 尝试导入错误:“createNote”未从“./graphql/mutations”导出(导入为“createNoteMutation”)
- ext.net - Ext.NET Combobox 本地查询不返回数据时的回调