我可以創建JObject如何使Newtonsoft.Json.Linq.JObject不可變?
var jobject = Newtonsoft.Json.Linq.JObject.Parse(jsonstring);
我要轉換的jobject只讀,以便沒有新的密鑰可以添加或現有的值修改。
我可以創建JObject如何使Newtonsoft.Json.Linq.JObject不可變?
var jobject = Newtonsoft.Json.Linq.JObject.Parse(jsonstring);
我要轉換的jobject只讀,以便沒有新的密鑰可以添加或現有的值修改。
不可變的對象是一個無法更改的對象。如果你不想讓你的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)
來獲取子集。
'jobject'的範圍是什麼?會[C#公共變量作爲可寫內部類但只讀類外](http://stackoverflow.com/a/4662190/1115360)對你有用嗎? –
@AndrewMorton我不控制JObject類。我可以在它周圍寫一個包裝,但它不會是微不足道的。 – Rohit
您不需要改變JObject類,而只需控制對「jobject」實例的訪問。或者你是說所有* JObject的實例必須是隻讀的? –