Json.NET 使用对象初始值设定项构造 JSON

Json.NET constructing JSON with object initializers

我想使用集合的对象初始值设定项构造 Json.NET 对象。

我能做到:

JObject jsonObject = new JObject { { "Date", DateTime.Now }, { "obj", new JObject { { "string", "bla" } } } };

现在我想做的例子:

var j=new HashSet<int> { 5 };
JObject jsonObject = new JObject { { "hashset", j } };

但是我得到一个错误,因为没有从 HashSet 到 JToken 的隐式转换

这个有效:

var j=new HashSet<int> { 5 };
JObject jsonObject = new JObject { { "hashset", JToken.FromObject(j) } };

但对于复杂的构造来说会变得非常冗长。

不幸的是,我不能使用扩展方法来添加从 HashSet 到 JToken 的隐式转换,这可能是理想的。

还有其他解决方法吗?

实际上您正在使用 collection initializers,因为 JObject 实现了 IEnumerable 并具有具有以下签名的 Add 方法:

public void Add(string propertyName, JToken value)

因此,您只需创建 Add 具有适当签名的扩展方法:

namespace Newtonsoft.Json.Linq
{
    public static class JsonExtensions
    {
        public static void Add(this JObject target, string propertyName, object value) =>
            target.Add(propertyName, JToken.FromObject(value));
    }
}