Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加到JArray的JSON.NET_Json_Json.net - Fatal编程技术网

添加到JArray的JSON.NET

添加到JArray的JSON.NET,json,json.net,Json,Json.net,我有一个json数组要添加到其中,然后将内容写入一个文件。将内容添加到数组中没有问题,但使用JsonSerializer.Serialize方法写入文件时会出现异常: 例外情况: 无法将Newtonsoft.Json.Linq.JObject添加到Newtonsoft.Json.Linq.JObject 这发生在我下面代码的最后一行。jSerializer.Serialize(o.CreateWriter(),o) JSON 操作JSON对象的代码 JContainer o = (JObject

我有一个json数组要添加到其中,然后将内容写入一个文件。将内容添加到数组中没有问题,但使用JsonSerializer.Serialize方法写入文件时会出现异常:

例外情况: 无法将Newtonsoft.Json.Linq.JObject添加到Newtonsoft.Json.Linq.JObject

这发生在我下面代码的最后一行。jSerializer.Serialize(o.CreateWriter(),o)

JSON

操作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);

我这样做是错误的吗?

通过调用
JContainer.CreateWriter
得到的writer不会像您希望的那样写入文件-它是一个写入容器本身的writer。您需要类似以下代码的东西-基于文件创建一个“常规”文本编写器,然后基于该文件创建一个
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);
    }
}
如何从a.json文件**反序列化?
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);
    }
}