ASP.Net Core 3.1控制器如何配置支持JSON类型的请求响应属性
实现方法
有两种成熟的原生支持方案,不需要手动做序列化/反序列化处理,可同时适配请求绑定和响应输出:
方案1:使用System.Text.Json 原生JsonElement类型(适用于默认采用System.Text.Json序列化的项目)
.NET Core 3.1 自带的System.Text.Json库提供了JsonElement类型,可接收任意结构的JSON数据(对象、数组、基础值类型都支持),无需提前定义对应结构。
代码示例
using System.Text.Json; public class MyRequest { public string Name { get; set;} public JsonElement JSONData { get; set; } }
常用操作示例
读取内部属性:
// 读取JSONData内的roles数组 List<string> roles = JSONData.GetProperty("roles") .EnumerateArray() .Select(item => item.GetString()) .ToList();
响应时直接赋值该属性即可,序列化会自动输出为标准JSON结构。
方案2:使用Newtonsoft.Json的JToken类型(适用于已接入Newtonsoft.Json序列化的项目)
如果你的项目已经配置使用Newtonsoft.Json作为序列化组件,可直接用JToken类型接收任意JSON结构。
前置配置
确保已安装NuGet包Microsoft.AspNetCore.Mvc.NewtonsoftJson,并在Startup.cs中开启配置:
services.AddControllers() .AddNewtonsoftJson();
代码示例
using Newtonsoft.Json.Linq; public class MyRequest { public string Name { get; set;} public JToken JSONData { get; set; } }
常用操作示例
读取内部属性:
// 读取JSONData内的roles数组 List<string> roles = JSONData["roles"].ToObject<List<string>>();
响应时直接赋值该属性即可自动序列化为标准JSON结构。
补充说明:如果
JSONData字段可能为空,直接将类型声明为可空类型(JsonElement?/JToken?)即可,框架会自动处理空值绑定和序列化。
内容的提问来源于stack exchange,提问作者NTN
相关产品推荐
相关产品推荐

