【发布时间】:2021-01-04 08:49:36
【问题描述】:
我在 ASP.NET Core 3.1 中有一个 Web API 方法,它返回一个可枚举的对象列表:
public async Task<IEnumerable<MyObject>> Get()
Web API 默认返回 JSON。这一直很好,直到我向 MyObject 添加了 Dictionary
由于 JsonConvert 仍然可以很好地序列化 Dictionary,因此在方法中手动进行序列化并不难。但这意味着制作我自己的 JSON 响应并将其作为内容字符串返回,这看起来……不太好。
我是否可以使用另一种关联数组类型,以便 Web API 可以正确序列化为 JSON?或者有没有办法将 Web API 配置为使用可以处理 Dictionary 的 JSON 序列化库?还是我只是坚持为此方法制作自己的 JSON 响应?
编辑:需要明确的是,我很好奇其中哪些是可能的,每种方法的优点或缺点是什么,以便我可以根据我的情况选择一个好的解决方案。
【问题讨论】:
-
在微软的文档中有一个如何为
Dictionary<Enum,TValue>编写自定义JsonConverter的示例:Support Dictionary with non-string key。你可以遵循这种模式。或者,只需将您的数据模型从Dictionary<int, T>转换为Dictionary<string, T>即可。 -
@IanKemp 对不起,但我在这里不仅要问每种方法是否可行,还要问它是否比其他方法更好或更差。至少在我的经验中,这正是 StackOverflow 比 Google 更擅长的地方。
-
@dbc 谢谢,我什至没有想过转换字典的底层类型,因为我没有意识到这是一个特别有问题的非字符串键。这应该对我们有用,而无需更改 API 使用的 Json 序列化。
-
@Jason 对不起,如果我遇到了生硬的问题 - Stack Overflow 上提出了 很多 问题,其中大部分不值得任何人花时间,而且令人沮丧与他们打交道。你似乎真的是来这里学习的,这正是这个网站的目的,我不想阻止这一点。请确保您的问题尽可能具体——这有助于我们为您提供帮助。
标签: json.net asp.net-core-webapi system.text.json