上下文
在我的一些 ASP.NET 项目中的类中,序列化/反序列化 JSON
我想使用静态 JsonConvert...
方法不是最好的选择,也不是使用 new
带有硬编码的类
问题
我会在构造函数中注入(inject)一些东西吗?我是否必须为此目的定义我的自定义简单接口(interface),或者是否有任何约定/内置概念如何不对类型进行硬编码?
最佳答案
如果有帮助,ASP.NET Core 会在某些地方抽象 JSON 序列化程序本身。例如,在 Razor View ( View 和页面)中,您可以使用 Json.Serialize()
将东西序列化到正文中。这使用 IJsonHelper
提供对序列化的抽象访问,同时使用序列化程序中的所有预配置设置(确保输出一致)。
在 2.2 中,底层 JsonHelper
使用 JsonOutputFormatter
实际提供对序列化程序的访问。 IJsonHelper
和 JsonOutputFormatter
可以通过依赖注入(inject)获得,因此您可以在需要时将它们注入(inject)任何地方。
在 3.0 中,团队正在移除对 Newtonsoft.Json 的直接依赖,并自行引入适当的抽象。 IJsonHelper
虽然仍然存在。默认情况下,Newtonsoft.Json 不会出现,所以如果你依赖它(例如,因为你正在静态使用它),那么你将不得不自己添加一个依赖项(并且可能切换 ASP.NET Core 也可以使用它) .
当你想反序列化时,IJsonHelper
不会帮助您,并且周围没有任何组件可以让您直接访问反序列化器。在这些情况下,您始终可以创建 JsonSerializer
你自己。您可以从 DI 获取序列化程序设置:
IOptions<MvcJsonOptions> mvcJsonOptions // get through DI
var serializer = JsonSerializer.Create(mvcJsonOptions.Options.SerializerSettings);
它使用框架中全局配置的序列化设置。
通常,只需使用
JsonConvert
静态的也可以。但总的来说,您应该尽量避免自己序列化和反序列化东西。该框架已经在数据进出的各个地方为您解决了这个问题。因此,根据您的用例,可能已经自动在 JSON 之间进行转换。
关于c# - 是否有任何约定或内置概念如何注入(inject) Json 序列化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56216384/