【问题标题】:How to update the element value inside serialized dynamic JSON如何更新序列化动态 JSON 中的元素值
【发布时间】:2020-09-16 15:40:44
【问题描述】:

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

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

感谢您的帮助。

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

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

【问题讨论】:

  • 任何 json 的例子都很容易帮助你。
  • @Sreenath:添加有问题的示例
  • 还是不清楚这里要问什么。

标签: c# json .net serialization json-deserialization


【解决方案1】:

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

例如,在您的情况下,如果您想修改 Params 属性,您只需访问该对象并添加/编辑该属性:

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

【讨论】:

    【解决方案2】:

    使用ExpandoObject

    您可以尝试使用ExpandoObject。这样,您可以在扩展对象上添加/编辑属性,然后再次序列化并拥有扩展的 json 对象。

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

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

    表示一个对象,其成员可以在运行时动态添加和删除。

    使用Json.Text

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2019-08-31
      相关资源
      最近更新 更多