json - 使用 Newtonsoft Json 获取 json 属性类型
问题描述
我用 JObject.Parse(json) 解析了一个 Json 字符串,我正在尝试遍历属性。我发现访问 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);
Console.WriteLine("o[p.Name].Type: " + o[p.Name].Type); // correctly returns js type
Console.WriteLine("p.Type: " + p.Type); // returns Property for every item
Console.WriteLine("p.GetType(): " + p.GetType()); // returns Newtonsoft.Json.Linq.JProperty for every item
Console.WriteLine();
}
我想必须有某种方法可以从属性中获取 json 类型。(现场小提琴在这里)
解决方案
Value
a的JProperty
是JToken
。您可以使用Type
a 上的属性JToken
来获取其 JSON 类型。所以你只需要使用p.Value.Type
来获得你正在寻找的东西。
小提琴示例:https ://dotnetfiddle.net/CtuGGz
using System;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
string json = @"
{
""CPU"": ""Intel"",
""Integrated Graphics"": true,
""USB Ports"": 6,
""OS Version"": 7.1,
""Drives"": [
""DVD read/writer"",
""500 gigabyte hard drive""
]
}";
JObject o = JObject.Parse(json);
foreach (var p in o.Properties())
{
Console.WriteLine("name: " + p.Name);
Console.WriteLine("type: " + p.Value.Type);
Console.WriteLine("value: " + p.Value);
Console.WriteLine();
}
}
}
推荐阅读
- javascript - :after 元素上的 Angular MouseEvent 为 event.toElement.clientWidth 提供了错误的值
- javascript - 单选按钮值的返回类型是整数还是字符串
- javascript - 未捕获的 SyntaxError:使用 Rails 导入 Javascript 时出现意外标识符
- c# - C# 将字符串存储到外部文件的最简单方法
- c# - 样式设置的工具提示不起作用
- vba - 带有 SQL 插入的 VBA ADO Excel-2010 参考表
- python - sqlalchemy 通用日期时间算法
- json - Node.JS:如何抓取特定数据的 json 页面
- neo4j - 因果集群上只有 12 个事务/秒
- dart - 将小部件添加到卡片底部