4

当我序列化为 JSON 时,我习惯于将 .NET 字典变成对象,其中键作为属性,值作为它们的值。(Json.Net 文档有一个简洁的例子。

我正在使用 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 似乎只理解列表,而不理解字典。

我不觉得我正在尝试做的事情是不合理的。让键成为键似乎是正确的,并且是共享此数据的最有用的方式(例如,正如此答案所建议的那样)。

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

4

1 回答 1

2

经过大量研究,这似乎不在 GraphQL 的规范中,因此在 GraphQL.Net 中不受支持

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

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

于 2018-12-18T23:58:35.387 回答