【问题标题】:Convert List<Property> To JObject将 List<Property> 转换为 JObject
【发布时间】:2016-11-09 19:37:23
【问题描述】:

考虑这段代码:

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

我最终得到一个List&lt;JProperty&gt;

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

【问题讨论】:

    标签: c# json.net linq-to-json


    【解决方案1】:

    是的,您可以将列表传递给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 属性缺失,因为它的值不是字符串。)

    【讨论】:

    • 只是好奇。但是 var obj = list.Cast() 也可以吗?
    • @PaulStoner:不,这是完全不同的事情——这会给出一个IEnumerable&lt;JObject&gt;,当你迭代它时会抛出一个异常,因为列表中的值不是对@987654326 实例的引用@.
    • 很高兴我当时没有用它作为答案。谢谢
    猜你喜欢
    • 2018-10-28
    • 2013-09-19
    • 1970-01-01
    • 2016-08-02
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多