gpt4 book ai didi

c# - 使用 JSON.Net 读取具有 NULL 处理的 JSON 属性

转载 作者:行者123 更新时间:2023-11-30 23:06:21 25 4
gpt4 key购买 nike

我有一个像下面这样的 JSON 结构来显示特定候选人的详细信息它可以为空,也可以包含如下所示的一些详细信息

     "details": {
"gender": {
"id": 3,
"props": {
"name": "male"
}
}
}

or as null

"details": {
"gender": null
}

为了阅读性别的值(value),我尝试过

 string _gender = (string)result["details"]["gender"]["props"]["name"];  

这将适用于非空情况。但是如果它为 null 那么这段代码返回一个异常

所以首先要检查它是否为空,如果不为空则尝试读取该值,我尝试了下面的代码

        string _gender = (string)result["details"]["gender"];
if (!string.IsNullOrEmpty(_gender))
{
_gender = (string)result["details"]["gender"]["props"]["name"];
}

但我遇到无法将对象转换为字符串的异常。那么如何通过正确的空处理读取 JSON 属性\

最佳答案

我强烈建议您将 json 反序列化为已知类型。

public class Props
{
public string name { get; set; }
}

public class Gender
{
public int id { get; set; }
public Props props { get; set; }
}

public class Details
{
public Gender gender { get; set; }
}

public class JsonObject
{
public Details details { get; set; }
}

然后进行反序列化;

var jsonObject = JsonConvert.DeserializeObject<List<JsonObject>>(json);
foreach (var o in jsonObject)
{
var genderName = o?.details?.gender?.props?.name;
}

通过这种方式,您可以处理可能的空值并获得强类型对象。

编辑

此外,在您的代码中,您试图将对象转换为字符串,但这是完全错误的。 gender 对象似乎是一个复杂的类型。所以你不能把它转换成字符串,你应该像这样修改你的代码;

object _gender = result["details"]["gender"];
if (_gender != null)
{
string genderName = result["details"]["gender"]["props"]["name"].ToString();
}

关于c# - 使用 JSON.Net 读取具有 NULL 处理的 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48258322/

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