【发布时间】:2021-04-13 11:36:46
【问题描述】:
我有一个平面 DTO 对象,其中包含通过 API 调用返回的约 500 个字段。 .NET 机器将其转换为 JSON,一切都很好。它看起来像这样:
{
"id": 1,
"desc": "foo",
"system": "axmls",
"bedrooms": 5,
"flooring": "tile",
"roof": "tesla",
...
...
}
现在我被要求将这大约 500 个字段分类,使其看起来类似于:
{
"main": {
"id": 1,
"desc": "foo",
"system": "axmls",
...
}
"interior": {
"bedrooms": 5,
"flooring": "tile",
...
}
"exterior": {
"roof": "tesla",
...
}
}
我已经想到了几种方法来做到这一点(都不太吸引人)
- 创建一个新对象以匹配此结构并将数据复制到其中。不太好。
- 手动构建 JSON。没有。
- 用 Category 属性标记原始对象上的每个字段,然后在 FilterAttribute 中以某种方式对其进行转换。这个听起来最有希望,虽然我不知道如何实现它。
有没有办法以理智的方式创建这样的 JSON 结构?
【问题讨论】:
-
考虑JSONata。
-
构建一个元数据字典(字符串、字符串),将每个项目(卧室、地板、屋顶)映射到类别(主要、内部、外部)。将您拥有的数据(大的初始列表)读入
Dictionary<string, string>。然后走那个字典,在元数据中查找类别。最后用结果填充Dictionary<string, Dictionary<string, string>>并将其序列化回 JSON -
创建一个新对象来匹配这个结构并将数据复制到它。不太好。 - 是最简单的方法。可维护,可读,因为读者可以看到我们暴露了不同的数据结构。可维护,因为您只有一种方法可以将原始数据结构转换为我们发送的数据结构。
-
如果您想要一个非常简单的实现 @Fabio 的建议,请在下面查看我的回答。简单、可维护、自我记录
标签: c# asp.net .net asp.net-web-api