Musiałem przeskakiwać przez obręcze, ale prawie udało mi się uzyskać ServiceStack
pracując na iOS z Monotouch
w moim projekcie. Jeden Runtime JIT
wyjątek trzyma się:Jak zmusić kompilator Monotouch AOT do wyświetlenia zagnieżdżonej metody generycznej?
System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int>()' while running with --aot-only.
Kod wykraczająca jest dość prosta:
internal WriteObjectDelegate GetWriteFn<T>()
{
return JsonWriter<T>.WriteFn();
}
Jako test, ja zmodyfikowany kod SS aby metody wewnętrznych i rodzaje publicznych i zawarte następujące w kodzie startowym mojego projektu (aby uzyskać wywołanie).
var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn();
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>();
To nadal nie ostrzega AOT z jakiegoś powodu, otrzymuję wyjątek, gdy powyższy kod wykona! Czy to dlatego, że parametr ogólny jest typem wartości? Czy to dlatego, że są to statyczne klasy i metody? Jak zmusić Monotouch do AOT powyższych metod?
Kod SS którym mowa jest w JsonTypeSerializer.cs i JsonWriter.Generic.cs w: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json
To wygląda dziwnie. Czy możesz zgłosić błąd na stronie http://bugzilla.xamarin.com z przypadkiem testowym? –
Mając ten sam problem, jedyną drogą do serializowania listy int jest: var serializedData = "[" + string.Join (",", Ids.ToArray()) + "]"; –