NavidK0 / SimpleGraphQL-For-Unity

A simple graphQL client that allows one to use .graphql files (or code) for queries, mutations, and subscriptions with Unity.
MIT License
34 stars 18 forks source link

Anonymous type resolver doesn't seem to work on WebGL #11

Closed johanhelsing closed 3 years ago

johanhelsing commented 3 years ago

I guess I was a bit quick with one of those PRs as it doesn't seem to work on WebGL. I get errors like this in the console

JsonSerializationException: Unable to find a constructor to use for type SimpleGraphQL.Response`1[<>f__AnonymousType4`1[<>f__AnonymousType2`1[System.String]]]. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'data', line 1, position 8.
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract objectContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, Newtonsoft.Json.Serialization.JsonProperty containerProperty, System.String id, System.Boolean& createdFromNonDefaultCreator) [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in <00000000000000000000000000000000>:0

I think it's related to code stripping. Although elegant, perhaps the lambda resolver method doesn't quite work with il2cpp builds.

Looking into workarounds.

Or maybe I just need to add an empty constructor somewhere and put some attribute on it. Will investigate further tomorrow.