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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使Newtonsoft.Json.Linq.JObject不可变?相关的知识,希望对你有一定的参考价值。

我可以创建JObject

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

我想将jobject转换为只读,以便不能添加新密钥或修改现有值。

答案

它无法完成。实施它有一个悬而未决的问题:

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

但它已经两年了,据我所知,很少受到关注。

另一答案

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

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)来获取子集。

以上是关于如何使Newtonsoft.Json.Linq.JObject不可变?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 RelativeLayout 半透明但不使活动

如何用word使图片上下居中

如何使图像自动调整大小,使宽度为 100% 并相应调整高度?

如何使 UISegmentedcontrol 透明?

如何使 textarea 填充 div 块?

如何使 UITableViewCell 显示为禁用?