ASP.Net Core 中的 JSON 序列化/反序列化

Posted

技术标签:

【中文标题】ASP.Net Core 中的 JSON 序列化/反序列化【英文标题】:JSON serialization/deserialization in ASP.Net Core 【发布时间】:2015-04-24 07:39:33 【问题描述】:

既然没有javascriptSerializer,那么可以用什么原生实现来处理呢?

我注意到JsonResult,我可以用它将数据格式化为 JSON,但是我该如何反序列化?

或者我在project.json 中缺少一些依赖项?

【问题讨论】:

【参考方案1】:

您可以使用Newtonsoft.Json,它是Microsoft.AspNet.Mvc.ModelBinding 的依赖关系,它是Microsoft.AspNet.Mvc 的依赖关系。因此,您无需在 project.json 中添加依赖项。

#using Newtonsoft.Json
....
JsonConvert.DeserializeObject(json);

注意,使用 WebAPI 控制器不需要处理 JSON。

更新 ASP.Net Core 3.0

Json.NET 已从 ASP.NET Core 3.0 共享框架中删除。

您可以在高性能 Utf8JsonReaderUtf8JsonWriter 之上使用新的 JSON 序列化程序层。它将对象从 JSON 反序列化并将对象序列化为 JSON。内存分配保持最小,包括支持异步读取和写入 JSON 流。

要开始使用,请使用 System.Text.Json.Serialization 命名空间中的 JsonSerializer 类。有关信息和示例,请参阅documentation。

在 ASP.NET Core 3.0 项目中使用 Json.NET:

添加对Microsoft.AspNetCore.Mvc.NewtonsoftJson的包引用 更新 ConfigureServices 以调用 AddNewtonsoftJson()。
    services.AddMvc()
        .AddNewtonsoftJson();

阅读Migrate from ASP.NET Core 2.2 to 3.0 Preview 2 中的Json.NET support 了解更多信息。

【讨论】:

现在 AspNetCore.Mcv 不再依赖 Newtonsoft.JSON 了。用于序列化的 Microsoft.AspNet.Mvc.Formatters.Json 程序集。 @RomanPokrovskij, wrong, : Microsoft.AspNetCore.Mvc.Formatters.Json 依赖于 Microsoft.AspNetCore.JsonPatch 依赖于 Newtonsoft.Json 9.0.1 nuget.org/packages/Microsoft.AspNetCore.Mvc.Formatters.Json, nuget.org/packages/Microsoft.AspNetCore.JsonPatch 也可以使用 JsonConvert.DeserializeObject(json) 反序列化到特定的类。【参考方案2】:

.net 核心

using System.Text.Json;

###要序列化

var jsonStr = JsonSerializer.Serialize(MyObject)

###反序列化

var weatherForecast = JsonSerializer.Deserialize<MyObject>(jsonStr);

有关排除属性和空值的更多信息,请查看 This Microsoft site

【讨论】:

你知道如何将json反序列化为动态类型吗? 请注意 System.Text.Json 是一个“有损”序列化程序,不会包含基类上的属性。

以上是关于ASP.Net Core 中的 JSON 序列化/反序列化的主要内容,如果未能解决你的问题,请参考以下文章

每个请求的 ASP.NET Core API JSON 序列化程序设置

设置 Asp.Net Core MVC Json 选项

asp.net core序列化json配置,适用于mvc,webapi

asp.net core序列化json配置,适用于mvc,webapi

如何在 asp.net core 3 中设置 json 序列化程序设置?

ASP.NET Core 3.0 System.Text.Json骆驼案例序列化