2013-12-10 79 views
4

我有一個我想添加到的json數組,然後將內容寫入文件。我沒有問題,添加內容到數組,但寫入文件中使用JsonSerializer.Serialize方法讓我異常:JSON.NET添加到JArray

的ArgumentException: 不能添加到Newtonsoft.Json.Linq.JObject Newtonsoft.Json.Linq。 JObject。

這發生在我的代碼的最後一行下面。 「jSerializer.Serialize(o.CreateWriter(),o);」

JSON

{ 
"ArrayToManipulate": 
[ 
    { 
     "Name":"Value" 
    }, 
    { 
     "Name":"value" 
    } 
] 
} 

代碼操縱JSON對象

JContainer o = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); 
JArray x = (JArray)o["ArrayToManipulate"]; 
ContentObject newObject = new ContentObject(){Name="Value"}; 
JToken tokenToAdd = JToken.Parse(JsonConvert.SerializeObject(newObject, Formatting.Indented)); 
x.Add(tokenToAdd); 
JsonSerializer jSerializer = new JsonSerializer(); 
jSerializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); 
jSerializer.Serialize(o.CreateWriter(), o); 

我要對這個錯誤的方式?

回答

1

通過調用JContainer.CreateWriter獲得的作者不會根據需要寫入文件 - 它是寫入容器本身的作者。你需要類似下面的代碼 - 根據文件創建一個「常規」文本編寫器,然後基於此創建一個JsonWriter

const string JSON = "{\"ArrayToManipulate\":[{\"Name\":\"Value\"},{\"Name\":\"value\"}]}"; 
var reader = new StringReader(JSON); 
JContainer o = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); 
JArray x = (JArray)o["ArrayToManipulate"]; 
ContentObject newObject = new ContentObject() { Name = "Value" }; 
JToken tokenToAdd = JToken.Parse(JsonConvert.SerializeObject(newObject, Formatting.Indented)); 
x.Add(tokenToAdd); 
JsonSerializer jSerializer = new JsonSerializer(); 
jSerializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); 
using (var w = File.CreateText(@"C:\temp\a.json")) 
{ 
    using (var jw = new JsonTextWriter(w)) 
    { 
     jSerializer.Serialize(jw, o); 
    } 
} 
+0

以及如何** DE-Serialize「從_a.json file_? – Kiquenet