You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Newtonsoft Json的JObject解析JSON后获取属性类型的疑问

直接获取JProperty对应JSON值类型的方法

当然有更直接的方式!你完全不需要通过父节点o[p.Name]来获取属性的JSON类型——JProperty对象的Value属性本身就是JToken类型,而JToken自带Type属性,直接访问p.Value.Type就能拿到你想要的JSON类型。

修正后的示例代码

string json = @"{ CPU: 'Intel', Drives: [ 'DVD read/writer', '500 gigabyte hard drive' ] }";
JObject o = JObject.Parse(json);
foreach (var p in o.Properties())
{
    Console.WriteLine("name:" + p.Name + ", value: " + p.Value);
    // 直接从属性的Value获取JSON类型,无需绕回父节点
    Console.WriteLine("p.Value.Type: " + p.Value.Type);
}

为什么这能行?

JPropertyValue字段返回的就是对应属性的**JToken实例**,这个实例包含了该JSON值的所有元数据,其中就包括Type属性(对应JTokenType枚举,比如StringArrayObject等)。你之前用o[p.Name]其实是从父对象中重新获取了同一个JToken对象,所以直接用p.Value.Type不仅更简洁,效率也更高。

额外的类型判断技巧

如果需要针对特定类型做逻辑处理,还可以结合JTokenType枚举或者类型转换:

foreach (var p in o.Properties())
{
    switch (p.Value.Type)
    {
        case JTokenType.String:
            Console.WriteLine($"{p.Name} 是字符串类型,值为:{(string)p.Value}");
            break;
        case JTokenType.Array:
            Console.WriteLine($"{p.Name} 是数组类型,包含元素:");
            foreach (var item in (JArray)p.Value)
            {
                Console.WriteLine($"  - {item}");
            }
            break;
        // 可以继续处理其他类型(比如Object、Number等)
    }
}

内容的提问来源于stack exchange,提问作者opensas

火山引擎 最新活动