gpt4 book ai didi

json - 尝试在 Monotouch 上使用 ServiceStack 序列化自定义对象时出现 AOT 编译错误

转载 作者:行者123 更新时间:2023-12-04 16:07:55 27 4
gpt4 key购买 nike

我正在尝试在 monotouch 中使用 servicestack 序列化一个对象,但我终其一生都无法弄清楚如何在为设备进行 AOT 构建时让这些类可用。该构建适用于模拟器。我有最新版本的 Monotouch 和最新版本的 Monotouch ServiceStack 库,这是我今天早上自己拉取并构建的。

我想做的是调用泛型 ToJson() 来序列化我的模型对象(下面称为 Note)。我所有的 Web 服务模型/服务调用/序列化/反序列化都发生在我的 iphone 和 android 应用程序外部的类库中,我试图在其中调用 JsConfig.RegisterForAot() 和 JsConfig.RegisterTypeForAot(),这似乎没有帮助。我还在我的 iPhone 应用程序中调用这些方法,因为我不确定这两个位置是否都是必需的。

错误/堆栈跟踪:

Attempting to JIT compile method 'ServiceStack.Text.Common.WriteListsOfElements`2<int, ServiceStack.Text.Json.JsonTypeSerializer>:WriteListValueType (System.IO.TextWriter,object)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.


at ServiceStack.Text.Common.WriteType`2[MyClassLibrary.Note,ServiceStack.Text.Json.JsonTypeSerializer].WriteProperties (System.IO.TextWriter writer, System.Object value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.SerializeToString (System.Object value, System.Type type) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.SerializeToString[Object] (System.Object value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.StringExtensions.ToJson[Object] (System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.ObjectToJson (System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.AddObjectToData (System.Net.WebRequest request, System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.SendJsonRequest[Note] (System.String url, System.String httpVerb, MyClassLibrary.Note obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Note.JSONSave () [0x00000] in <filename unknown>:0
at iphoneapp.myViewController.SaveNote () [0x000a5] in /Users/myUser/Projects/iphoneapp/iphoneapp/ViewControllers/myViewController.cs:83

Exact target/types:
ServiceStack.Text.Common.WriteType`2[[MyClassLibrary.Note, MyClassLibraryName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[ServiceStack.Text.Json.JsonTypeSerializer, ServiceStack.Text.MonoTouch, Version=3.8.5.0, Culture=neutral, PublicKeyToken=null]]

如有任何帮助,我们将不胜感激。

最佳答案

我遇到过其中一些问题,问题通常归结为在我的一些 DTO 属性中使用了枚举。

您需要做的是为 AOT 编译器明确地为每个枚举强制初始化通用序列化程序。我这样做的方法是在我的 AppDelegate.FinishedLaunching 代码中创建一堆虚拟序列化器(我不对它们做任何事情):

// AOT register enums that are involved in service DTOs
var dummy1 = new JsonSerializer<MyEnum>();
var dummy2 = new JsonSerializer<MyOtherEnum>();

如果您只使用 JSON 端,那么您应该可以通过上述方法取得一些成功。

在某些情况下,我将列表序列化为单个字符串属性,因此我也以与上述相同的方式初始化 JsvSerialiser。

关键是在代码中为您的枚举显式创建序列化程序,以便 AOT 编译器可以提前查找和编译。

关于json - 尝试在 Monotouch 上使用 ServiceStack 序列化自定义对象时出现 AOT 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12498954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com