我可以在我的 GraphQL 中将我的 .NET 词典表示为 JSON 词典吗?

Can I represent my .NET dictionaries as JSON dictionaries in my GraphQL?

当我序列化到 JSON 时,我习惯于 .NET 字典成为对象,键作为属性,值作为它们的值。 (The Json.Net docs have a succinct example.)

我正在使用 GraphQL 并努力获得类似的结果。我的这个根查询的数据基本上是 Dictionary<MyEnum,Dictionary<string,string>>。到目前为止我得到的最接近的是:

{
  "data": {
    "outterDict": [
      {
        "key": "THING_1",
        "innerDict": [
          {
            "key": "key1",
            "val": "val1"
          },
          ...
        ]
      },
      {
        "key": "THING_2",
        "innerDict": [
          {
            "key": "key2",
            "val": "val2"
          },
          ...
        ]
      }
    ]
  }
}

但我希望它更接近于此:

{
  "data": {
    "collection": {
      "THING_1": {
        "key1": "val1",
        ...
      },
      "THING_2": {
        "key2": "val2",
        ...
      }
    }
  }
}

我正在苦苦挣扎,因为 GraphQL .Net only seems to understand lists,而不是字典。

并不觉得我想做的事不合理。让键成为键似乎是正确的,并且是共享此数据的最有用的方式(例如 suggested by this answer)。

有没有办法在 GraphQL 中做到这一点?有没有办法在 GraphQL .Net?

中做到这一点

经过大量研究,这似乎不在 GraphQL 和 is therefore unsupported in GraphQL.Net 的规范中。

GraphQL 期望提前知道所有可能的属性(即 map/dictionary 中的键)。这意味着我们在 运行 时间失去了很多传递字典的价值。

所以虽然 GraphQL JSON 比惯用语更冗长 JSON,但它是故意这样的。