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));
}
}
我想使用集合的对象初始值设定项构造 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));
}
}