1

我正在尝试将一个对象添加到我的 GraphQL.NET 模型中,但其中一个字段有问题。原来的类是

public class ShowCriterion
{
    public string RelatedEntity { get; set; }
    public object MatchValue { get; set; }
}

这需要一个物化路径(如Person.Address.ZipCode),并将其与MatchValue. 问题是,MatchValue可能有很多不同的东西:布尔值、整数、字符串、列表/数组、日期时间等。

我的第一次尝试是创建 GraphQL 类,如下所示:

    public partial class ShowCriterionQL : ObjectGraphType<ShowCriterion>
    {
        public ShowCriterionQL()
        {
            Field(x => x.RelatedEntity, type: typeof(StringGraphType));
            Field(x => x.MatchValue, type: typeof(ObjectGraphType));
        }
    }

但它给出了以下错误:

GraphQL.Validation.ValidationError: Field matchValue of type ObjectGraphType must have a sub selection

如果我将其设置为 a StringGraphType,它将正确转换一些值(例如,布尔真变为“真”),但我真的不喜欢这种解决方案,因为它需要在客户端进行特殊处理。我还没有探索所有可能的类型以查看数组或 DateTime 会发生什么。

有什么方法可以在 GraphQL.NET 中做到这一点?

(在搜索中,我发现了几个处理类型参数的资源,但这对我正在做的事情并没有真正的帮助,因为我使用通用对象并在运行时使用反射来确定如何处理特定值。我还发现这个悬而未决的问题非常相似......但遗憾的是没有答案。)

4

1 回答 1

0

您可以使用 AnyScalarGraphType 但请注意,尽管在执行时具有它的查询可以正常工作,但 graphql 客户端无法识别它。

AnyScalarGraphType:https ://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Utilities/Federation/AnyScalarGraphType.cs

GraphQL 客户端问题:https ://github.com/graphql/graphiql/issues/1705

您还可以创建自己的自定义标量类型。

于 2021-12-15T08:49:59.847 回答