2016-09-06 63 views
2

我試圖向現有的JSONJObject添加新節點,但是當我添加它時無法正確格式化。它在整個節點中添加引號,並將其放置到位。JSON將節點添加到現有的JObject中

背景: 我加載JSON文件,做一些邏輯,然後添加一個節點早在想我能做到這一點是這樣的:

mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject)); 
File.WriteAllText("myfile.json", mainJson.ToString()); 

問題是,這是結果:

{ 
"JSONFile": [ 
    { 
    "More": "Nodes", 
    "InThe": "File" 
    } 
], 
"Customers": "{\"FirstName\":\"Mike\",\"LastName\":\"Smith\"},{\"FirstName\":\"Jane\",\"LastName\":\"Doe\"}", 
} 

我知道我的JsonConvert.SerializeObject(myObject的)是,如果我這樣做的工作:

string json = JsonConvert.SerializeObject(MyObject); 
File.WriteAllText("myfile2.json" json); 

結果是這樣的:

[ 
    { 
    "FirstName": "Mike", 
    "LastName": "Smith" 
    }, 
    { 
    "FirstName": "Jane", 
    "LastName": "Doe" 
    } 
] 

我缺少什麼?

編輯: 正在關注@Swagata Prateek對此評論;

mainJson.Add("Customers",JObject.FromObject(MyObject)); 

類型 'System.ArgumentException' 的未處理的異常發生在Newtonsoft.Json.dll

其他信息:對象序列化到陣列。預計JObject實例。

我要指出,爲MyObject是實際ObservableCollection如果有差別

+1

當你調用'JsonConvert.SerializeObject(myObject的)','這裏MyObject'被序列化爲一個字符串,因此'NewNode'這裏展示自己所報的字符串。 :) –

回答

3

能不能請這個嘗試?

mainJson.Add("NewNode", JObject.FromObject(MyObject)); 
File.WriteAllText("myfile.json", mainJson.ToString()); 

當你正在做JsonConvert.SerializeObject(MyObject)它系列化MyObject並在這個過程中你得到一個字符串出來。

當您指定mainJson.Add("NewNode", JsonConvert.SerializeObject(MyObject));時,您正在爲NewNode分配一個字符串。因此,你會得到一個代表系列化MyObject

更新帶引號的字符串:

JArray.FromObject是你要尋找的,如果你想要到您的收藏轉換爲JArray的方法。在這種情況下,段會看起來像

mainJson.Add("NewNode", JArray.FromObject(obsColl)); 
File.WriteAllText("myfile.json", mainJson.ToString()); 
+0

一個男人選擇,一個奴隸服從!反正請看看上面的編輯。這是返回一個錯誤。 – Xaphann

+1

Ooops。對不起,老兄。不知道這是一個集合。等一下。不知道我可以通過電話正確輸入代碼段 –