有多种方法可以做到这一点。
一种是直接调用 JSON.NET 方法并将您的设置传递给它。
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
};
return base.Content(JsonConvert.SerializeObject(query, settings), "application/json");
或者,返回JsonResult
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
};
return new JsonResult(query, settings);
注意第二个例子。在 .NET Core 3.0 中,JSON.NET 不再硬连线到 ASP.NET Core 中,并且 ASP.NET Core 不提供 JSON.NET 并使用新的 System.Text.Json 类基跨度。
在 ASP.NET Core 2.x 中,JsonResult 接受 JsonSerializerSettings 作为第二个参数。
从 ASP.NET Core 3.x 开始,JsonResult 接受 object,并且根据所使用的序列化程序,需要不同的类型。
这意味着,如果您在代码中使用第二个示例,则在迁移到 ASP.NET Core 3.0 时(起初)会中断,因为它不再依赖于 JSON.NET。您可以通过将 Newtonsoft.Json 包添加到您的项目并添加来轻松地将 JSON.NET 添加回它
servics.AddNewtonsoftJson();
在您的 ConfigureServices 方法中,再次使用 JSON.NET。但是,如果将来您决定离开 JSON.NET 并使用 System.Text.Json 或任何其他 Json 序列化程序,则必须更改所有使用它的地方。
随意将其更改为扩展方法,创建自己的动作结果类,继承自 JsonResult 等。
public class TypelessJsonResult : JsonResult
{
public TypelessJsonResult(object value) : base(value)
{
SerializerSettings.TypeNameHandling = TypeNameHandling.None;
}
}
并将控制器的操作代码减少到
return new TypelessJsonResult(query);