我有一个 .Net 8.0 WebAPI 项目,我使用 NSwag 生成一个 c# SDK APIClient 类,以便我可以从另一个项目与其交互。
NSwag 正在用此属性标记所有字符串
[Newtonsoft.Json.JsonProperty("longUrl", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public string LongUrl{ get; set; }
它对所有字符串都执行此操作。我遇到的问题是,当我调用客户端并尝试将 json 反序列化为对象时,如果未提供字符串,则会失败。
我不确定我应该在这里做什么?如果我手动更改
Required = Newtonsoft.Json.Required.DisallowNull
to Newtonsoft.Json.Required.Default
然后它就可以工作了,但我不想在每次构建后手动更新整个文件。
我需要用可为空的字符串标记我的 DTO 吗
例如:
string? LongUrl { get; set; }
或者有没有办法让 Nswag 始终使用默认值?
从 .NET 6 开始,必须要求不可为 null 的属性。正如您所说,您可以使用
?
或设置默认值以允许可为空。如果你想全局实现需求,只需打开项目文件并删除<Nullable>enable</Nullable>
。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<!--<Nullable>enable</Nullable>-->
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>