JSON SerializeObject无法在iOS硬件上使用Abstrack成员序列化类



当我尝试在实际iPhone上运行Xamarin表单应用程序时,它会使用系统失败。MissingMethodeXception:" type'System.com.com.com.com.ponent.componentmodel.referenceconverencon.referenceconvererter'未找到。" p>它在iOS模拟器以及Android硬件和虚拟设备上正常工作。

我已经能够将其范围缩小到以下情况:用引用的接口序列化对象:

public class Widget {
    public ISprocket Sprocket { get; set; };
}
public interface ISprocket {
  int SprocketId { get; set; }
}

执行行:

var w = new Widget { Sprocket = new Sprocket { SprocketId = 1 } };
string result = JsonConvert.SerializeObject(w);

除了在我的iPhone 8 上,它抛出系统。

我正在使用XF(2.5.0.122203(和json.net(10.0.3(的最新版本。

要重新创建此问题,请使用称为" TestBed"的iOS客户端创建一个新的Xamarin Forms解决方案。通过nuget添加newtonsoft.json,然后创建一个页面带有以下内容的" TestBedPage":

using System;
using Newtonsoft.Json;
using Xamarin.Forms;
namespace TestBed
{
    public class TestBedPage : ContentPage
    {
        public TestBedPage()
        {
            try
            {
                var m = new Widget { Sprocket = new Sprocket { SprocketId = 1 } };
                var st = JsonConvert.SerializeObject(m);
                Content = new Label { Text = st };
            } catch (Exception ex) {
                Content = new Label { Text = ex.ToString() };
            }
        }
    }
    public class Widget
    {
        public string Title { get; set; } = string.Empty;
        public ISprocket Sprocket { get; set; }
    }
    public interface ISprocket
    {
        int SprocketId { get; set; }
    }
    public class Sprocket : ISprocket
    {
        public int SprocketId { get; set; }
    }
}

将其部署到iPhone并运行。您应该得到一个屏幕上的缺失Xpection堆栈跟踪。

有人知道这里发生了什么吗?

问题是,某些东西试图通过Activator类通过其System.Type CTOR实例化一个System.ComponentModel.ReferenceConverter实例,但是由于它在您的应用程序中未直接引用您的应用程序,因此它将被托管链接器删除。

您需要提供自定义的链接器配置文件,将其添加到Xamarin.ios项目。

请参阅此处

相关内容

  • 没有找到相关文章

最新更新