背景:在.NET Core3.0+框架下编写WebApi并且使用dynamic类型传参,后台接收到的参数中会包含一个ValueKind的属性,包含ValueKind属性会影响取参的便捷性
导致原因:.NetCore3.0+默认的对象序列化解析程序为System.Text.Json下的JsonDocument,该解析程序解析dynamic出来的数据就会有ValueKind
解决办法(1):将默认的序列化程序System.Text.Json替换为Newtonsoft.Json
1.NuGet引入包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
2.Startup添加命名空间:using Newtonsoft.Json.Serialization
;
3.Startup类的ConfigureServices方法中添加代码:
//添加对象序列化程序为Newtonsoft.Json
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
JObject传参解析报错问题也可用该方式解决
解决办法(2):使用JsonConvert.DeserializeObject进行转换
dynamic dynParam = JsonConvert.DeserializeObject(Convert.ToString(param));
string strName = Conver.ToString(dynParam.Name);