在.Net 6.0中的隔离进程Azure函数中使用Newtonsoft.Json

vjhs03f7  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(326)

我当前使用Azure应用配置来存储所有配置数据。当我读取数据时,我希望使用Newtonsoft.Json而不是默认的System.Text.Json将我的数据正确转换为自定义类型。
不幸的是,我找不到一种方法来告诉Program.cs文件中的HostBuilder使用Newtonsoft.Json而不是System.Text.Json。我所有的转换器都是用Newtonsoft.Json编写的,我真的不想把它们都迁移到System.Text.Json
例如:

public Enum SampleEnum 
{
  [Description("Sample")] SampleAbc
}

public class SampleConfig
{
  public SampleEnum ConfigEnumA {get; set;}
}

// configuration is the IConfiguration object from Microsoft.Extensions.Configuration

var sampleConfig = new SampleConfig()
configuration.GetSection("section").bind(sampleConfig);

DescriptionSample是来自Azure应用配置的字符串,理想情况下,我当前的Newtonsoft.Json转换器应在绑定对象SampleConfig时将其转换为SampleAbc枚举值。这使我能够在代码中实现类型安全。
这意味着ConfigEnumA的值应为SampleEnum.SampleAbc,而不是Sample
我已经尝试使用,但它没有工作,虽然我正在使用HTTP触发器,而不是一个Web应用程序

var hostBuilder = new HostBuilder().ConfigureServices(services => 
{
  services.AddMvc().AddNewtonsoftJson(options => 
  {
    options.SerializerSettings.Converters = <my-custom-converters>
  }
)
});

如果没有办法在非Mvc应用程序的Azure Function应用程序中使用Newtonsoft.Json,那么有人能帮助实现System.Text.Json的相同行为吗?
谢谢你的帮助。干杯。

mkshixfv

mkshixfv1#

  • AFAIK,Services.AddMvcCore().AddJsonOptions(...)用于 * 系统.文本.Json*,而builder.services.AddMvcCore().AddNewtonsoftJson(options =>可用于 * 牛顿软件.json*。
  • 如果要使用 Newtonsoft,请从包含AddNewtonsoftJson()扩展的NuGet中添加Microsoft.AspNetCore.Mvc.NewtonsoftJson作为依赖项。
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 7.0.0

  • 感谢@Nate1zn,我找到了如何在Azure Function应用中使用Newtonsoft.Json,您可以向您的函数项目添加启动,如下所示:
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection

[assembly: FunctionsStartup(typeof(NewtonsoftjsonfunctionApp.functionsample))]
namespace NewtonsoftjsonfunctionApp
public class functionsample : FunctionsStartup
{
  public override void Configure(IFunctionsHostBuilder builder)
  {
    builder.services.AddMvcCore().AddNewtonsoftJson(options => 
    {
      options.SerializerSettings.//json settings
    }
  }
}

相关问题