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

154

由于没有 JavaScriptSerializer,有哪些本地实现可以用来处理这个问题?

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

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

2个回答

258
你可以使用 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共享框架中删除。

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

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

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

    services.AddMvc()
        .AddNewtonsoftJson();

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


现在AspNetCore.Mcv不依赖于Newtonsoft.JSON。Microsoft.AspNet.Mvc.Formatters.Json程序集用于序列化。 - Roman Pokrovskij
9
@RomanPokrovskij的说法是错误的:Microsoft.AspNetCore.Mvc.Formatters.Json依赖于Microsoft.AspNetCore.JsonPatch,而后者又依赖于Newtonsoft.Json 9.0.1版本。详情可见以下链接:https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.Formatters.Json/ 和 https://www.nuget.org/packages/Microsoft.AspNetCore.JsonPatch/。 - agua from mars
你也可以使用JsonConvert.DeserializeObject<YourClass>(json)将其反序列化成一个特定的类。 - Nuno Ribeiro

46

.NET Core

使用 System.Text.Json;

###序列化

var jsonStr = JsonSerializer.Serialize(MyObject)

###反序列化

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

了解有关排除属性和 null 的更多信息,请查看此 Microsoft 网站


4
你知道如何将 JSON 反序列化为动态类型吗? - zolty13
1
请注意,System.Text.Json是一种“有损”序列化程序,并且不会包括基类上的属性。 - StingyJack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接