考虑以下代码:
var joWork = ((JObject) x).Properties()
.Where(p => p.Value.Type == JTokenType.String).ToList();
我最终得到了一个List<JProperty>
对象。
是否有一种快速的方法,使用Linq或JSON.NET函数将该List<JProperty>
对象转换为JObject,而不必在循环中从头构建JObject?
考虑以下代码:
var joWork = ((JObject) x).Properties()
.Where(p => p.Value.Type == JTokenType.String).ToList();
我最终得到了一个List<JProperty>
对象。
是否有一种快速的方法,使用Linq或JSON.NET函数将该List<JProperty>
对象转换为JObject,而不必在循环中从头构建JObject?
没错,你可以将列表直接传递给JObject
构造函数,Json.NET会完成其他工作。以下是一个示例:
using System;
using System.Linq;
using Newtonsoft.Json.Linq;
public class Test
{
static void Main()
{
JObject original = JObject.Parse("{ \"x\": \"a\", \"y\": \"b\", \"z\": 1 }");
var properties = original
.Properties()
.Where(p => p.Value.Type == JTokenType.String)
.ToList();
var recreated = new JObject(properties);
Console.WriteLine(recreated);
}
}
输出:
{
"x": "a",
"y": "b"
}
(由于其值不是字符串,因此缺少z
属性。)
IEnumerable<JObject>
,但当你遍历它时会抛出异常,因为列表中的值不是指向JObject
实例的引用。 - Jon Skeet