从 ASP.NET Core Web API 返回 JSON 关联数组的问题
Issue returning a JSON associative array from an ASP.NET Core Web API
我在 ASP.NET Core 3.1 中有一个 Web API 方法,returns 一个可枚举的对象列表:
public async Task<IEnumerable<MyObject>> Get()
Web API returns JSON 默认。这工作得很好,直到我将类型为 Dictionary 的 属性 添加到 MyObject,没有意识到无论序列化程序 ASP.NET Core 3.1 用于构建响应都无法序列化 Dictionary (错误是“不支持类型 Dictionary”)。我可以通过尝试使用新的 System.Text.Json 库序列化 Dictionary 来重现相同的错误,我猜这就是网络 API 用来构建 JSON 响应的内容。
由于 JsonConvert 仍然可以很好地序列化 Dictionary,因此在方法中手动进行序列化并不难。但这意味着我要做出自己的 JSON 响应并将其作为内容字符串返回,这似乎……不太好。
是否有我可以使用的另一种关联数组类型,网络 API 可以正确序列化为 JSON?或者有没有办法配置网络 API 以使用可以处理字典的 JSON 序列化库?还是我只是坚持为这种方法做出自己的 JSON 回应?
编辑:明确地说,我很好奇这些中哪些是可能的,每个的优点或缺点是什么,以便我可以为我的情况选择一个好的解决方案。
此回答来自评论中@dbc。我没有意识到序列化 Dictionary 的 System.Text.Json 困难一般不是 Dictionary,而是特别是使用 non-string 键的 Dicitonary。我们编写一个转换器来将必要的 Dictionary 翻译成 string-keyed 类型,然后 built-in JSON 序列化就可以很好地处理它。
谢谢@dbc!
我在 ASP.NET Core 3.1 中有一个 Web API 方法,returns 一个可枚举的对象列表:
public async Task<IEnumerable<MyObject>> Get()
Web API returns JSON 默认。这工作得很好,直到我将类型为 Dictionary
由于 JsonConvert 仍然可以很好地序列化 Dictionary,因此在方法中手动进行序列化并不难。但这意味着我要做出自己的 JSON 响应并将其作为内容字符串返回,这似乎……不太好。
是否有我可以使用的另一种关联数组类型,网络 API 可以正确序列化为 JSON?或者有没有办法配置网络 API 以使用可以处理字典的 JSON 序列化库?还是我只是坚持为这种方法做出自己的 JSON 回应?
编辑:明确地说,我很好奇这些中哪些是可能的,每个的优点或缺点是什么,以便我可以为我的情况选择一个好的解决方案。
此回答来自评论中@dbc。我没有意识到序列化 Dictionary 的 System.Text.Json 困难一般不是 Dictionary,而是特别是使用 non-string 键的 Dicitonary。我们编写一个转换器来将必要的 Dictionary 翻译成 string-keyed 类型,然后 built-in JSON 序列化就可以很好地处理它。
谢谢@dbc!