Newtonsoft.Json没有在iphone设备上工作模拟器monotouch iphone

时间:2013-04-11 17:06:05

标签: iphone json xamarin.ios

我为我的应用程序创建了一个构建并在设备上运行。虽然它是在模拟器上工作但不在设备上工作。并导致此错误:

  Exception in Class: BaseIOAddOn 
Line : 0 
and Method:ParseGeneralSettingsFromSettingJson 
with message Attempting to JIT compile method 'Newtonsoft.Json.Linq.JToken:Value<int> (object)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.

我正在使用json.NET 4.0 R3 for MonoTouch来解析json,但我不知道它还没有在设备上运行的问题是什么。

编辑: 我的应用程序解决方案中没有任何组件文件夹。我从xamaring组件站点下载JSON.Net dll并将其替换为我的Newtonsoft.JSon.monotouhch.dll,但它无效。

我在xamarin工作室找到了Components文件夹,并将该组件从该文件夹添加到应用程序,但仍然出现上述错误。我很困惑为什么它说错误在第0行。

在所述第0行的例外中,但是从错误的内容和我的代码优先级我认为它来自这段代码:

try {
            Dictionary <string  ,string > generalSettings = new Dictionary <string ,string > ();
            JObject jsonUnits = JObject.Parse (Response);
            var settingsList = jsonUnits ["settings"] [SettingTypes .AppSettings.GetDescription ()];
            int i = 0;
            var tmp_factor = settingsList [i.ToString ()];
            while (tmp_factor!=null) {
                generalSettings  .Add (tmp_factor ["name"].ToString (), tmp_factor ["value"].ToString ());
                i++;
                tmp_factor = settingsList [i.ToString ()];
            }
            var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

            generalSettings .Add (AppConstants .XmlAddOnComplexKey.GetDescription() ,addOnComplexStatus .ToString ());

            return generalSettings;
        } catch (Exception ex) {
            Common .HandleException (ex);
            return null;
        }

特别:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

我发现这篇文章:http://www.brettnagy.com/post/2009/11/21/Using-JsonNET-with-MonoTouch.aspx表示使用此代码:[MonoTouch.Foundation.Preserve] 我不明白,这是什么?

2 个答案:

答案 0 :(得分:1)

删除项目中对Newtonsoft.Json.dll的引用,如果您有项目源,请将其从解决方案中删除。 (只是不要删除它,以防这不能解决您的问题)

在“组件”文件夹中,右键单击并选择“添加组件”。搜索JSON.Net并添加组件。

尝试使用此预编译的DLL,看看是否仍有相同的问题。

答案 1 :(得分:0)

感谢大家的帮助。 当我改变这行代码时:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

到此:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()]["status"].ToString ();

问题解决了。 :)