【发布时间】:2020-01-20 17:30:54
【问题描述】:
所以我们有一个文档数据库,它将我们的数据存储为 XML 文件。一个新的要求是创建一个 graphQL 接口来访问 xmldocument。 我已经实现了带有扩展的 graphQL 接口:
https://github.com/graphql-dotnet/graphql-dotnet https://github.com/graphql-dotnet/server
到目前为止,我可以从 XML 文件动态创建字段:
public ReferenceType(IRepository repository)
{
var searchResult = repository.GetExampleForSchema();
foreach(var field in searchResult.Root.Elements())
{
if (!field.HasElements && field.Attribute(json + "Array") == null)
{
Field<StringGraphType>(field.Name.LocalName);
}
else
{
//TODO: Create child ObjectGraphTypes
}
}
}
但我不知道如何在我的存储库中返回结果:
public dynamic Search()
{
var searchResult = new ExpandoObject() as IDictionary<string, object>;
//var searchResult = new { recordCount = 124345};
var xDocSearch = InternalSearch();
foreach (var field in xDocSearch.Root.Elements())
{
if (!field.HasElements && field.Attribute(json + "Array") == null)
{
var fieldName = field.Name.LocalName;
searchResult[fieldName] = field.Value;
}
else
{
//TODO: Create child objects
}
}
return searchResult;
}
问题是,GraphQL 与反射一起使用并使用此逻辑来读取字段: https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Resolvers/NameFieldResolver.cs
ExpandoObject 没有我的示例 recordCount 作为属性。当我创建一个匿名类型(参见注释行)时,它可以工作。
所以我的问题是:
是否有可能创建具有可通过反射访问的动态属性的类型? (不能影响值的读取方式)
GraphQL 扩展中是否有其他方法可以解决此问题?我可以配置读取值的方式吗?
期待一些提示和技巧!
谢谢, 迈克尔
【问题讨论】:
标签: c# asp.net-core graphql