0

我正在使用 graphql-dotnet ( dotnet GraphQl ) 在 DotNet Core 2.1 中实现 GraphQL。我有以下课程:

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class CustomerInputType : InputObjectGraphType
{
    public CustomerInputType()
    {
        Name = "CustomerInput";
        Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
        Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
    }
}
public class CustomerOutputType : ObjectGraphType<Customer>
{
    public CustomerOutputType()
    {
        Name = "Customer";
        Field<NonNullGraphType<IntGraphType>>(nameof(Customer.Id));
        Field<NonNullGraphType<StringGraphType>>(nameof(Customer.Name));
    }
}
public class CustomerMutation : ICustomerMutation
{
    public void Resolve(GraphQLMutation graphQLMutation)
    {
        graphQLMutation.FieldAsync<CustomerOutputType, Customer>
        (
            "createCustomer",
            arguments: new QueryArguments
            (
                new QueryArgument<NonNullGraphType<CustomerInputType>> { Name = "customer"}
            ),
            resolve: context =>
            {
                var customer = context.GetArgument<Customer>("customer");
                return Task.FromResult(customer);
            }
        );
    }
}

这是我通过 GraphIQL 发送给这个突变的输入:

mutation createCustomer
{ 
    createCustomer(customer:{id: 19, name: "Me"})
    {id name} 
}

这是 C# 代码中的输入:

在此处输入图像描述

手表显示 id 的值是0x00000013而不是19

这是 GraphIQL 中的输出:

在此处输入图像描述

我需要19在注入此突变的存储库中使用 的值进行进一步处理。但是,当我将 Customer 对象传递给存储库时,Customer 对象中 id 的值0x00000013会导致进一步的下游处理失败,因为它期望19而不是0x00000013.

为什么0x00000013C# 代码中对象的值却被转换为 GraphIQL 中的实际值?如何在突变返回结果之前将 Cusutomer.id 的值转换为其正确的整数值以进行进一步处理?

4

1 回答 1

1

没错,该值只是显示为十六进制。是你的检查员让你感到困惑。13 hex 作为二进制是

10011

那是十进制

19

https://www.rapidtables.com/convert/number/hex-to-decimal.html

于 2020-01-16T00:15:59.910 回答