2012-12-11 13 views
26

我不得不跳過箍環,但我幾乎設法在我的項目中獲得ServiceStack在iOS上使用Monotouch。一個運行時JIT異常被捧出來:如何強制Monotouch AOT編譯器查看嵌套泛型方法?

System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int>()' while running with --aot-only. 

有問題的代碼非常簡單:

internal WriteObjectDelegate GetWriteFn<T>() 
    { 
     return JsonWriter<T>.WriteFn(); 
    } 

作爲測試,我修改了SS代碼,以使內部的方法和類型的公共和包括以下是我項目的啓動代碼(實際上被調用)。

var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn(); 
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>(); 

這仍然沒有提醒AOT出於某種原因,我得到的異常時,執行上面的代碼!這是因爲泛型參數是一個值類型?還是因爲這些是靜態類和方法?我如何強制Monotouch AOT上述方法?

有問題的擴頻碼是JsonTypeSerializer.cs和JsonWriter.Generic.cs在: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json

+0

這看起來很奇怪。你能用一個測試用例在http://bugzilla.xamarin.com上提交一個bug嗎? –

+0

如果存在相同的問題,序列化整數列表的唯一方法是:var serializedData =「[」+ string.Join(「,」,Ids.ToArray())+「]」; –

回答

1

有在MonoTouch的一些通用limitations現在。我認爲你應該檢查你的代碼到其中的一個。