如何让 StrawberryShake 将 ID 视为数字?

问题描述 投票:0回答:1

我正在使用 startgg GraphQL 模式,它有一个用于某些对象的 id 字段,StrawberryShake 尝试将其解析为字符串。架构有这个

type Event {
  id: ID
  ...
}

规格有这个

scalar ID

在运行时,我收到此错误

System.InvalidOperationException: The requested operation requires an element of type 'String', but the target element has type 'Number'.
   at System.Text.Json.ThrowHelper.ThrowJsonElementWrongTypeException(JsonTokenType expectedType, JsonTokenType actualType)
   at System.Text.Json.JsonDocument.CheckExpectedType(JsonTokenType expected, JsonTokenType actual)
   at System.Text.Json.JsonDocument.GetString(Int32 index, JsonTokenType expectedType)
   at System.Text.Json.JsonElement.GetString()
   at StartGG.GraphQL.State.GraphQLClientEntityIdFactory.ParseEventEntityId(JsonElement obj, String type)
   at StartGG.GraphQL.State.GraphQLClientEntityIdFactory.Parse(JsonElement obj)
   at StartGG.GraphQL.State.GetNumberOfEntrantsBuilder.Update_IGetNumberOfEntrants_EventEntity(IEntityStoreUpdateSession session, Nullable`1 obj, ISet`1 entityIds)
   at StartGG.GraphQL.State.GetNumberOfEntrantsBuilder.<>c__DisplayClass9_0.<BuildData>b__0(IEntityStoreUpdateSession session)
   at StrawberryShake.EntityStore.Update(Action`1 action)
   at StartGG.GraphQL.State.GetNumberOfEntrantsBuilder.BuildData(JsonElement obj)
   at StrawberryShake.OperationResultBuilder`1.Build(Response`1 response)

有点令人失望的是,毛伊岛最大的 graphql 项目甚至无法正确处理 startgg 提供的 graphql。

有没有办法告诉它把ID解析为long?

生成的代码有这个金块,这对于开发人员来说似乎非常短视:

Deserialize_String(global::StrawberryShake.Json.JsonElementExtensions.GetPropertyOrNull(obj, "id"))

如何在 .Net Maui 中修复此问题?

c# graphql maui strawberryshake
1个回答
0
投票

毛伊岛最大的 graphql 项目确实令人失望 甚至无法正确处理startgg提供的graphql。

让我们看看: https://graphql.org/learn/schema/#scalar-types

更具体地说这部分:

ID:唯一标识符,通常用于重新获取对象或作为键 用于缓存。 ID类型的序列化方式与String相同; 然而,将其定义为 ID 意味着它不旨在 人类可读。

这背后的重点是,有各种各样的ID。

您想要整数长。其他人想要 GUID 作为字符串。其他人想要水果的 base64 编码的 jpg 图像。 (我希望最后一部分是在开玩笑,但我确实收到了 API 规范,并且必须使用它。)

所以,首先 - 获取你的字符串。 然后用它做任何你想做的事。

© www.soinside.com 2019 - 2024. All rights reserved.