如何更新序列化动态中的元素值 JSON

How to update the element value inside serialized dynamic JSON

我在 .net(C#) 中有一个要求,我需要在 JSON 中发送动态类型的对象,并且需要将其更新到另一个 API 并将其再次发送到另一个 API进行处理。 我很难将其反序列化为动态类型以更新 属性.

之一

我能够使用“RootElement.GetProperty()”获取值,但无法在 JSON.

中设置值

感谢帮助。

传递给 .net 核心的 JSON 结构示例 api:

 {
  "TaskId": "24332",
  "Code": "Sample_code",
      "Type": 1,
      "Name": "New Product",
      "Params": {
        "Year": "2020",
    "Filter": "LTH"
    }
} 

使用ExpandoObject

您可以尝试使用ExpandoObject。这样,您可以 add/edit 扩展对象的属性,然后再次序列化并拥有扩展的 json 对象。

var obj = JsonConvert.DeserializeObject<ExpandoObject>(jsonText, new ExpandoObjectConverter());

https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.expandoobject?view=netcore-3.1

Represents an object whose members can be dynamically added and removed at run time.

使用Json.Text

我猜这就是你的方法。检查 How to add property in existing json using System.Text.Json library? 的解决方案。

我建议使用 Newtonsoft 的原生对象 JObject、JArray 或 JToken。

例如,在你的情况下,如果你想修改Params 属性,你只需要访问对象和add/edit 属性:

string json = @"{'TaskId':'24332','Code':'Sample_code','Type':1,'Name':'New Product','Params':{'Year':'2020','Filter':'LTH'}}";

JObject jObject = JsonConvert.DeserializeObject<JObject>(json);

if (jObject["Params"] is JObject p) {
    p.Add("ProductType", "Battery");
}

string newJson = JsonConvert.SerializeObject(jObject);