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

时间:2018-12-11 22:17:11

标签: c# .net dictionary graphql graphql-dotnet

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

我正在使用GraphQL并努力实现类似的结果。我用于此根查询的数据基本上是catch (HttpResponseException e) { string error = e.ToString(); return Content(HttpStatusCode.MethodNotAllowed, error); } 。到目前为止,我最接近的是:

Dictionary<MyEnum,Dictionary<string,string>>

但我希望它更接近于此:

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

我之所以努力,是因为GraphQL .Net only seems to understand lists,而不是字典。

这不是感觉,就像我想做的是不合理的。将键设置为键似乎是正确的,并且是共享此数据的最有用的方式(例如,以suggested by this answer开头)。

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

1 个答案:

答案 0 :(得分:0)

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

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

因此,尽管GraphQL JSON比惯用JSON更冗长,但这是故意的。