我试图自动将新对象添加到现有的json文件中。我环顾网络,但只发现添加数据和东西,但不是整个对象。这就是我想编辑的文件的外观:
[
{"id":"123","name":"carl"}
]
我想去
[
{"id":"123","name":"carl"},
{"id":"1234","name":"carl2"}
]
感谢您的所有答案,但我不认为每个人都完全明白我的意思我尝试了一些答案,但后来我明白了:
[
"{\"id\":\"123\",\"name\":\"carl\"}"
]"{\"id\":\"1234\",\"name\":\"carl2\"}"
我希望在[]。
之间进行翻转答案 0 :(得分:12)
如果你使用json.NET,你可以简单地反序列化和序列化json。
var list = JsonConvert.DeserializeObject<List<Person>>(myJsonString);
list.Add(new Person(1234,"carl2");
var convertedJson = JsonConvert.SerializeObject(list, Formatting.Indented);
答案 1 :(得分:6)
使用Json.Net
//load from file
var initialJson = "[{\"id\":\"123\",\"name\":\"carl\"}]";
var array = JArray.Parse(initialJson);
var itemToAdd = new JObject();
itemToAdd["id"] = 1234;
itemToAdd["name"] = "carl2";
array.Add(itemToAdd);
var jsonToOutput = JsonConvert.SerializeObject(array, Formatting.Indented);
//save to file here
使用此方法并不需要强类型对象
您可以替换此位:
//load from file
var initialJson = "[{\"id\":\"123\",\"name\":\"carl\"}]";
使用
var initialJson = File.ReadAllText(@"c:\myjson.json")
从文本文件加载json
答案 2 :(得分:1)
你可以创建一个方法:
public string AddObjectsToJson<T>(string json, List<T> objects)
{
List<T> list = JsonConvert.DeserializeObject<List<T>>(json);
list.Add(objects);
return JsonConvert.SerializeObject(list);
}
然后像这样使用它:
string baseJson = "[{\"id\":\"123\",\"name\":\"carl\"}]";
List<Person> personsToAdd = new List<Person>() { new Person(1234,"carl2") };
string updatedJson = AddObjectsToJson(baseJson, personsToAdd);
答案 3 :(得分:0)
比序列化/反序列化大文件更好的解决方案是打开FileStream,在末尾查找1个字符,然后序列化并将新对象写入数组,然后写一个右括号。看到这个问题C# How to delete last 2 characters from text file and write into the same line at the end my text?,我将在这里复制代码-您已经知道如何序列化对象并将其编码为字节。
using(var fs = new FileStream("file.json")) {
fs.Seek(-1,SeekOrigin.End);
fs.Write(mySerializedJSONObjAsBytes,0,mySerializedJSONObjAsBytes.Length); // include a leading comma character if required
fs.Write(squareBracketByte, 0, 1);
fs.SetLength(fs.Position); //Only needed if new content may be smaller than old
}
对不起,您还没有测试过任何东西,这超出了我的头脑。提示:将FileStream包裹在StreamWriter中,以便可以直接编写字符串。
答案 4 :(得分:0)
这将是您的示例:
var list = JsonConvert.DeserializeObject<List<Example>>(json);
Example example = new Example();
example.name = "Product2";
example.id="1";
list.Add(example);
string output = JsonConvert.SerializeObject(list);
public class Example
{
public string id {get;set;}
public string name { get; set; }
}