gpt4 book ai didi

c# - 是否有任何约定或内置概念如何注入(inject) Json 序列化程序?

转载 作者:行者123 更新时间:2023-12-03 09:28:34 26 4
gpt4 key购买 nike

上下文

在我的一些 ASP.NET 项目中的类中,序列化/反序列化 JSON
我想使用静态 JsonConvert...方法不是最好的选择,也不是使用 new带有硬编码的类

问题

我会在构造函数中注入(inject)一些东西吗?我是否必须为此目的定义我的自定义简单接口(interface),或者是否有任何约定/内置概念如何不对类型进行硬编码?

最佳答案

如果有帮助,ASP.NET Core 会在某些地方抽象 JSON 序列化程序本身。例如,在 Razor View ( View 和页面)中,您可以使用 Json.Serialize()将东西序列化到正文中。这使用 IJsonHelper 提供对序列化的抽象访问,同时使用序列化程序中的所有预配置设置(确保输出一致)。

在 2.2 中,底层 JsonHelper使用 JsonOutputFormatter 实际提供对序列化程序的访问。 IJsonHelperJsonOutputFormatter可以通过依赖注入(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com