2017-04-20 160 views
1

我將如何繼續追加數據? 我有這樣的:在C#中的json文件中追加數據

{ 
    "13232": [ 
    "2012952" 
    ] 
} 

,我想一個又一個對象添加到它,例如:

{ 
    "13232": [ 
    "2012952" 
    ], 
    "19213": [ 
    "2016086" 
    ] 
} 

這是我使用的代碼:

JArray array = new JArray(); 
array.Add(Itemid); 

JObject o = new JObject(); 
o[Userid] = array; 

string json = o.ToString(Formatting.Indented); 
//i know this keeps appending text but how would i append it inside the { and }? 
File.AppendAllText("E:/media.json", json); 

我真的沒有想法如何繼續添加它,但也許別人有?

+0

您需要從現有文件中讀取數據,將其從JSON反序列化爲'''JArray''',將新數據附加到此'''JArray'''並使用更新的數據覆蓋舊文件。 –

回答

3

您將無法使用文件追加操作來執行此操作。文件附加操作只能將文本添加到最後,它們不能在中間的某個位置插入文本。這使得使用file-append來保持JSON有效是不可能的。

你,我能想到的兩種選擇:

  1. 將整個文件讀入一個對象,添加對象,然後 重寫整個文件(表現欠佳)
  2. 打開文件讀/寫,通過 解析,直到你的右大括號,然後寫剩餘 數據,然後寫靠近大括號(不平凡)
1

我建議您使用Newtonsoft的js在lib上,可作爲nuget包使用。

你可以創建一個模型類來表示json節點,然後你可以將你的Json解序列化爲該模型,並在最後構建一個包含新元素的數組,然後將其重新序列化爲json。

看看這個MSDN頁看:https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

編輯:Actual NewtonSoft Documentation

步驟:1 Deserialize the collection

2:而隨着listName.Add(類名)一個新的類實例;

3:Reserialize the collection

0

最安全的方法是讀取,更新,改寫(適用於JSON和XML格式,因爲它們不支持附加)。

如果你能無效的JSON住一個選項是簡單地串聯與你的代碼片段JSON比使用SupportMultipleContentJsonReader閱讀片段Read Multiple Fragments With JsonReader

如果這些方法不工作,你的格式是固定的 - 找到文件中最後一個]的位置,在那裏尋找流並寫入新的數組元素並追加]}