如何使Newtonsoft.Json.Linq.JObject不可变

本文关键字:JObject 不可变 Linq Json 何使 Newtonsoft | 更新日期: 2023-09-27 18:19:43

我可以创建JObject

var jobject = Newtonsoft.Json.Linq.JObject.Parse(jsonstring);

我想将jobject转换为只读,这样就不会添加新键或修改现有值。

如何使Newtonsoft.Json.Linq.JObject不可变

这是不可能的。实现它有一个悬而未决的问题:

https://github.com/JamesNK/Newtonsoft.Json/issues/468

但它已经两年了,据我所知,很少引起人们的注意。

不可变对象是指不能更改的对象。如果您不希望JObject的消费者更改它,只需给他们一份副本即可。(注意:此示例使用JObject的抽象超类JToken来提供更通用的解决方案。)

private JToken data = JToken.Parse(@"{""Some"":""JSON""}");
public JToken Data()
{
   return data.DeepClone();
}
public JToken Data(string path)
{
   return data.SelectToken(path).DeepClone();
}

消费者可以更改其副本,但不能更改源。

如果data太大,无法进行克隆,请使用第二种方法JToken Data(string path)获取子集。