Я добавляю Hot Chocolate (GraphQL) в существующий проект ASP. Net Core с веб-API и повторно использую модели, которые используются веб-API. Одна из моделей имеет IDictionary свойство, которое сериализуется в динамический c JSON с помощью веб-API.
Модель
public class Theme
{
...
public IDictionary<string, object> Styles { get; set; }
...
}
, которая с помощью веб-API может быть сериализована в
{
...
styles: {
header: {
color: "#fff",
background: "rgba(255, 255, 255, 0)",
boxShadow: "", position: "fixed"},
...
},
borderRadius: "4px",
...
}
...
}
С Hot Chocolate я повторно использую модель и добавляю GraphQL при запуске с помощью
services.AddGraphQL(sp => SchemaBuilder.New()
.AddServices(sp)
.AddQueryType(d => d.Name("Query"))
...
.AddType<Theme>()
.Create());
Созданная схема становится
type Theme {
...
styles: [KeyValuePairOfStringAndObject!]
...
}
, и можно получить только ключ
{
themes(...) {
edges {
node {
name
styles{
key
}
}
}
}
}
со следующим ответом
{
"themes": {
"edges": [
{
"node": {
...
"styles": [
{
"key": "header"
},
{
"key": "borderRadius"
},
...
]
}
}
]
}
}
Я хотел бы настроить Hot Chocolate, чтобы можно было написать запрос GraphQL, который дает такой же динамический c результат, что и веб-API .
ОБНОВЛЕНИЕ
Источник - строка JSON, десериализованная в словарь с
var jsonString = "{\"header\":{\"color\":\"#fff\"},\"borderRadius\":\"4px\"}";
theme.Styles = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);
Проблема в том, что результирующий словарь не рекурсивно сериализуется в словарь .