如何更新序列化动态JSON

问题描述

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

我能够通过“ RootElement.GetProperty()”获取值,但是在设置JSON中的值时并没有发现任何问题。

感谢帮助。

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

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

解决方法

使用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?以获得解决方案。

,

我建议使用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);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...