2017-06-27 79 views
1

我在C#中有一個json文件。這是70MB的數據。我想用JSON.net將它讀入Windows窗體應用程序,編輯一些數據並將其保存。 我的問題是我不想爲這個JSON文件創建所有的數據結構,但我想創建它們中的一部分。當我重新序列化文件時,我希望從我創建的數據結構中進行所有更改,而不會丟失沒有結構的數據。任何想法,如果這是可能的?我希望我的問題很清楚。C#部分反序列化和完全序列化

+0

這個東西絕對必須是JSON而不是數據庫嗎?對於任何形式的問題,「我如何痛苦地把A變成脆弱的突變體,模仿B所擅長的東西」,答案几乎總是「如果你想B,你知道在哪裏找到它」。 –

+0

你有什麼嘗試?我相信,在從源頭抓取數據之前,可能會對數據進行一些過濾。但是如果不知道自己實際做了什麼,很難說。 – geostocker

+0

您可以完全控制序列化過程,所以當然這是可能的。如果需要,實施ISerializable,存儲對文件的引用,並在需要序列化時加載文件,進行更改,並將其直接保存到文件或返回其內容。這裏的實現很難 - 這個概念很簡單。 – hoodaticus

回答

2

我建議你使用Json的XPath等價物。用Json.NET你可以parse這個字符串並創建一個動態對象。

With SelectToken您可以查詢值,或使用Linq

對於這個例子,我將假設一個包含序列化對象的json字符串。

var o = Newtonsoft.Json.Linq.JObject.Parse(jsonString); 
o.SelectToken("TheNodeToChange").Replace("TheNewValue"); 
var updatedJsonString = JsonConvert.SerializeObject(o); 

這將反序列化整個對象,您需要知道要更改的節點。但是你不必實現完整的對象模型。

+1

這是我的文章背後的想法,但不知道你可以解析爲這樣的變種,謝謝教我一些東西。 –