为了账号安全,请及时绑定邮箱和手机立即绑定

C#:将 Json 对象附加到已经包含数据的 Json 文件

C#:将 Json 对象附加到已经包含数据的 Json 文件

C#
红糖糍粑 2021-10-24 17:39:08
我创建了一个对象,其中包含要插入/附加到当前位于 json 文件中的数据的数据。我已经成功地将数据写入文件,但是它覆盖了原来存在的所有数据。我想要做的是将此属性附加到 json 文件,同时保留所有原始信息。这是我到目前为止所做的:string widthBox = Width.Text.ToString();string heightBox = Height.Text.ToString();string WindowSizejson = File.ReadAllText(DownloadConfigFilelocation);dynamic WindowSizejsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(WindowSizejson);JObject windowContent = new JObject(    new JProperty("externalSite",        new JObject(            new JProperty("webLogin",                new JObject(                    new JProperty("window", "height=" + heightBox + ",width=" + widthBox + ",resizable,scrollbars")                )            )        )    ));这是我需要将上述内容附加到 json 文件中的当前数据。(由于公司安全原因模糊了值)
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

你有两个我能想到的选择:


1.将整个文件读入一个对象,添加你的对象,然后重写整个文件(性能不佳)


var filePath = @"path.json";

// Read existing json data

var jsonData = System.IO.File.ReadAllText(filePath);

// De-serialize to object or create new list

var SomeObjectList= JsonConvert.DeserializeObject<List<T>>(jsonData) 

                      ?? new List<T>();


// Add any new 

SomeObjectList.Add(new T()

{

    Name = "..."

});

SomeObjectList.Add(new T()

{

    Name = "..."

});


// edit 

var first = SomeObjectList.FirstOrDefault();

first.Name = "...";



// Update json data string

jsonData = JsonConvert.SerializeObject(SomeObjectList);

System.IO.File.WriteAllText(filePath, jsonData);

打开文件读/写,解析直到到达右花括号,然后写入剩余的数据,然后写入右花括号(不是微不足道的)


查看完整回答
反对 回复 2021-10-24
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

不要乱搞 JProperty,反序列化你的 json 并附加你想要的数据:


JObject obj = JObject.Parse(jsontext);

obj["new_prop"] = "value";//new property as per hirarchy ,same for replacing values

string newjson=obj.ToString();

它更清洁,更易于维护。


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 517 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信