Aru*_*mar 2 null json json.net
我null在交易时遇到问题Newtonsoft.json.
我想查看结果null与否.基于此我想处理一些条件.
我的代码如下:
try {
var response = GetApiData.Post(_getApiBaseUrl, data.ToString());
var jsonString = response.ResultString;
var jsonContent = JObject.Parse(jsonString);
if (jsonContent["User"] != null) // <-- null handling
{
var user = JToken.Parse(jsonContent["User"].ToString());
membershipUser = GetMembershipUser(user);
}
}
Run Code Online (Sandbox Code Playgroud)
该jsonContent带null是如下:
{
"User": null
}
Run Code Online (Sandbox Code Playgroud)
如果"User": null在jsonContent["User"]回报{}和jsonContent["User"] != null条件没有抛出任何错误,而是跳越块,它执行内部线路.
所以为了null处理,我使用了这段代码:
if (jsonContent["User"].Value<string>() != null)
Run Code Online (Sandbox Code Playgroud)
如果"User": null,上面的代码工作正常.
但是如果jsonContent["User"]有有效数据,则会抛出错误.
无法将Newtonsoft.Json.Linq.JObject强制转换为Newtonsoft.Json.Linq.JToken
在jsonContent与有效数据如下:
{
"User": {
"Claims": [],
"Logins": [],
"Roles": [],
"FirstName": "Unknown",
"LastName": "Unknown",
"IsApproved": true,
"IsDeleted": false,
"Email": "testuser@user.com",
"EmailConfirmed": false,
"PasswordHash": "AC/qXxxxxxxxxx==",
"SecurityStamp": "001f3500-0000-0000-0000-00f92b524700",
"PhoneNumber": null,
"PhoneNumberConfirmed": false,
"TwoFactorEnabled": false,
"LockoutEndDateUtc": null,
"LockoutEnabled": false,
"AccessFailedCount": 0,
"Id": "00f50a00-0000-0000-0000-000b97bf2800",
"UserName": "testUser"
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用有效数据和空值来实现此null处理?
你可以检查JToken.Type是JTokenType.Null:
var jsonContent = JObject.Parse(jsonString);
var user = jsonContent["User"];
if (user != null && user.Type != JTokenType.Null)
{
membershipUser = GetMembershipUser(user);
}
Run Code Online (Sandbox Code Playgroud)
为了使检查更方便,可以引入一种扩展方法:
public static partial class JTokenExtensions
{
public static bool IsNull(this JToken token)
{
return token == null || token.Type == JTokenType.Null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后做:
if (!user.IsNull())
{
membershipUser = GetMembershipUser(user);
}
Run Code Online (Sandbox Code Playgroud)