【发布时间】:2020-11-09 20:02:07
【问题描述】:
我的解决方案中有几个项目。以下是其中 2 个:
- API(netcoreapp3.1 asp web API - 因此 System.Text.Json 可用)
- 实体(netstandard2.0 类库 - 因此 System.Text.Json 在那里不可用)。
实体包含我的 API 的 DTO(数据传输对象)。我需要为 DTO 提供我自己的 JSON 字段名称。我遇到了这个question,所以我尝试使用由System.Text.Json(.net core 3)提供的JsonPropertyNameAttribute,但它不起作用。
我需要做什么来指定自定义 JSON 字段名称?将Entities项目类型改成netcoreapp3.1(那么其他.net标准2.0库有问题)?使用不同的方式为 DTO 指定自定义 JSON 字段名称(我不想使用 Newtonsoft.Json,因为我听说它与 .net core 3+ asp Web API 存在兼容性问题)?
更新:正如strickt01所指出的,有NuGet package为其他.net版本提供System.Text.Json序列化和反序列化,例如:
- .NET Standard 2.0 及更高版本
- .NET Framework 4.7.2 及更高版本
- .NET Core 2.0、2.1 和 2.2
【问题讨论】:
-
您可以将 DTO 映射到 API 项目中指定的另一个类,然后使用 JsonPropertyNameAttribute。
-
@JacobSobus,但我不想在我的 API 项目中有类似 DTO 的类。这就是我决定将 API 和实体放在两个独立项目中的原因。
-
@JacobSobus,在我的实体项目中,我有两种类型的实体。第一个是 EF Core 模型(与我的数据库结构相匹配)。第二种类型是在 API 端点内部使用的 DTO。他们不同。我需要一种方法将 JSON 序列化 DTO 的字段名称从“CreationDate”更改为“creation_date”。
-
然后我会将 DTO 提取到其他项目中,供 API 和实体使用。将其作为 .net 核心项目并使用 JsonPropertyNameAttribute :) 恕我直言,这将是最好的选择 :)
-
@JacobSobus 感谢您的建议。我想我同意你的看法。
标签: c# json rest asp.net-core asp.net-web-api