.net nSwag客户端:是否有更好/更简单的方法来影响PropertyNameCaseInsensitive?

ugmeyewa  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(133)

我们正在尝试将System.Text.Json集成到我们的REST API和REST客户端中,之前使用Newtonsoft。
我们使用nsag CSharpClientGenerator.GenerateFile通过代码(而不是nSwag Studio)生成REST API客户端。
由于属性名称和json名称之间的大小写差异,项目不能正确地显示。我们可以通过设置PropertyNameCaseInsensitive = true来克服这个问题。
我们可以通过下面的部分类来实现:

partial class MakeClient
    {
        partial void UpdateJsonSerializerSettings(JsonSerializerOptions settings)
        {
            settings.PropertyNameCaseInsensitive = true;
        }
    }

我真的不想为每个客户端创建这些分部类。
有没有更简单的方法来做到这一点,比如将JsonSerializerOptions注入客户端,或者某种类型的全局设置?

watbbzwu

watbbzwu1#

要将System.Text.Json用于NSwag生成的API客户端(NSwag版本高于v14 preview)和基类,请执行以下操作:

  • 从你的项目引用中删除Microsoft.AspNetCore.Mvc.NewtonsoftJson和其他与Newtonsoft相关的NuGet包(如果有的话)-以防你还没有。他们不需要。
  • 使用SystemTextJson和基类-将其添加到nswag.json中-例如BaseClient

  • 像这样添加BaseClient.cs

  • 因此,生成的客户端将从基类调用UpdateJsonSerializerSettings方法

toe95027

toe950272#

尝试设置Newtonsoft的一个预定义的解析器:CamelCasePropertyValueContractResolver在nSwag中的设置如下:

或者,如果您为每个API规范维护单独的nswag设置,也可以在那里添加。
这个解析器将在模式中的FromJson和ToJson方法中设置,前提是您已经启用了通过NSwag生成这些方法。这也有一个设定。

这将生成如下代码:

相关问题