问题描述
.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);