gpt4 book ai didi

json - Newtonsoft 中的 JSON 空处理问题

转载 作者:行者123 更新时间:2023-12-01 07:57:17 25 4
gpt4 key购买 nike

我在处理 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);
}
}
jsonContentnull 如下:
{
"User": null
}

如果 "User": null jsonContent["User"] 返回 {} 并且 jsonContent["User"] != null 条件没有抛出任何错误,而是跳过该块,而是执行内部行。

因此,对于 null 处理,我使用了以下代码:
if (jsonContent["User"].Value<string>() != null)

如果 "User": null ,上面的代码工作正常。

但是如果 jsonContent["User"] 有有效数据,它会抛出一个错误。

Cannot cast Newtonsoft.Json.Linq.JObject to 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"
}
}

如何使用有效数据和空值实现这种空处理?

最佳答案

您可以检查 JToken.Type 是否为 JTokenType.Null :

var jsonContent = JObject.Parse(jsonString);
var user = jsonContent["User"];
if (user != null && user.Type != JTokenType.Null)
{
membershipUser = GetMembershipUser(user);
}

为了方便检查,可以引入一个扩展方法:
public static partial class JTokenExtensions
{
public static bool IsNull(this JToken token)
{
return token == null || token.Type == JTokenType.Null;
}
}

然后做:
if (!user.IsNull())
{
membershipUser = GetMembershipUser(user);
}

关于json - Newtonsoft 中的 JSON 空处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com