我正在使用 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 中修复此问题?
毛伊岛最大的 graphql 项目确实令人失望 甚至无法正确处理startgg提供的graphql。
让我们看看: https://graphql.org/learn/schema/#scalar-types
更具体地说这部分:
ID:唯一标识符,通常用于重新获取对象或作为键 用于缓存。 ID类型的序列化方式与String相同; 然而,将其定义为 ID 意味着它不旨在 人类可读。
这背后的重点是,有各种各样的ID。
您想要整数长。其他人想要 GUID 作为字符串。其他人想要水果的 base64 编码的 jpg 图像。 (我希望最后一部分是在开玩笑,但我确实收到了 API 规范,并且必须使用它。)
所以,首先 - 获取你的字符串。 然后用它做任何你想做的事。