将List <Property>转换为JObject

Jaz*_*mov 3 c# json.net linq-to-json

考虑以下代码:

var joWork = ((JObject) x).Properties()
    .Where(p => p.Value.Type == JTokenType.String).ToList();
Run Code Online (Sandbox Code Playgroud)

我结束了List<JProperty>.

有没有一种快速的方法使用Linq或JSON.NET函数将该List<JProperty>对象转换为JObject而无需在循环中从头开始构建JObject?

Jon*_*eet 11

是的,您可以将列表传递给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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "x": "a",
  "y": "b"
}
Run Code Online (Sandbox Code Playgroud)

(该z属性缺失,因为它的值不是字符串.)

  • @PaulStoner:不,那是完全不同的东西 - 会产生一个`IEnumerable <JObject>`,当你迭代它时会抛出异常,因为列表中的值不是对`JObject`实例的引用. (3认同)