JSON更新/替换节点通过LINQ

本文关键字:LINQ 节点 替换 更新 JSON | 更新日期: 2023-09-27 18:05:30

我需要取一个JSON文件并更新/替换JSON文件的一些对象。问题是当我把JSON分成不同的JObject时,它们总是null

背景:我需要用基于ObservableCollection的多个对象来解析和更新JSON文件(可以假设ObservableCollection的类将与JSON文件中的对象完美匹配)。下面是JSON

的示例
{
"Customers": [
    {
        "FirstName": "Bob",
        "LastName": "Smith"
    },
    {
        "FirstName": "Jane",
        "LastName": "Doe"
    }
],
"Subs":[
    {
        "SubID": "100",
        "Descript": "Sub 1"
    },
    {
        "SubID": "200",
        "Descript": "Sub 2"
    }
]
}

在我的WPF应用程序中,CustomersSubs将有ObservableCollection。因此,我认为我可以获取整个JSON,解析出我需要的对象,进行更新,然后更新对象以将更改保存在JSON中,如下所示;

JObject mainJson = JObject.Parse(File.ReadAllText("MyJSON.json"));
JObject cust = (JObject)mainJson["Customers"];
myColllection = JsonConvert.DeserializeObject<ObservableCollection<Customers>>(cust.ToString());
///Do update logic
cust = JObject.Parse(JsonConvert.SerializeObject(myColllection));
File.WriteAllText("MyJSON.json", mainJson.ToString());

问题是cust总是null。我不知道我做错了什么。还有,我应该用别的方法吗?

JSON更新/替换节点通过LINQ

代码的问题是mainJson["Customers"]是一个数组而不是一个jobobject。将代码更改为

JArray cust = (JArray)mainJson["Customers"];