将List<Property>转换为JObject

3

考虑以下代码:

var joWork = ((JObject) x).Properties()
    .Where(p => p.Value.Type == JTokenType.String).ToList();

我最终得到了一个List<JProperty>对象。

是否有一种快速的方法,使用Linq或JSON.NET函数将该List<JProperty>对象转换为JObject,而不必在循环中从头构建JObject?

1个回答

12

没错,你可以将列表直接传递给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属性。)


1
只是好奇,但是 var obj = list.Cast<JObject>() 也能行吗? - Paul Stoner
3
不,那是完全不同的操作 - 这会返回一个 IEnumerable<JObject>,但当你遍历它时会抛出异常,因为列表中的值不是指向 JObject 实例的引用。 - Jon Skeet
好在我没有把那个作为答案。谢谢。 - Paul Stoner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接