当我尝试在实际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项目。
请参阅此处