当链接器设置为"全部链接"时,JSON反序列化失败

Cas*_*ock 3 .net c# serialization json xamarin

尝试在设备上反序列化JSON时,我收到ArgumentNullException.这是确切的错误:

反序列化错误

这是调用代码:

private TMetadata ReadObject(string path)
{
    var data = File.ReadAllText(path);
    var obj = JsonConvert.DeserializeObject(data, _settings);
    return (TMetadata) obj;
}
Run Code Online (Sandbox Code Playgroud)

我通读了这个帖子并意识到这是一个链接器问题.在构建设备时,我的项目设置为Link All,由于大小限制,将其更改为Do not Link是不可行的.

我检查了json文本并找到了它试图反序列化的类型,然后转到该类并将其标记为Preserve(AllMembers = true)].我将相同的属性添加到类中使用的任何用户定义的类.但是,我仍然得到同样的错误.我还将--linkskip = AssemblyName添加到其他mtouch参数中并且没有运气.

有人有任何提示吗?至少有什么方法可以从xamarin获得更多有用的信息吗?当异常发生时,它将我带到一个看似随机的行 - 一个不相关的类中的事件声明 - 并且单击堆栈中的方法什么都不做.我不知道"方法"参数是什么.

这是在ReadObject调用之后开始的堆栈:

Newtonsoft.Json.Utilities.ValidationUtils.ArgumentNotNull(object value, string parameterName) in 
Newtonsoft.Json.Utilities.ExpressionReflectionDelegateFactory.CreateParametrizedConstructor(System.Reflection.MethodBase method) in 
Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(System.Collections.Generic.Dictionary<Bluebeam.Studio.Client.SDK.Sessions.SessionMarkupId,Bluebeam.Studio.Client.SDK.Sessions.ServerState.Pending.PendingItems.PendingMarkupDto> list) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewList(Newtonsoft.Json.JsonTextReader reader, Newtonsoft.Json.Serialization.JsonArrayContract contract, bool createdFromNonDefaultCreator) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(Newtonsoft.Json.JsonTextReader reader, System.MonoType objectType, Newtonsoft.Json.Serialization.JsonArrayContract contract, Newtonsoft.Json.Serialization.JsonProperty member, object existingValue, string id) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonTextReader reader, System.MonoType objectType, Newtonsoft.Json.Serialization.JsonArrayContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonObjectContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, object existingValue) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(Newtonsoft.Json.Serialization.JsonProperty property, Newtonsoft.Json.JsonConverter propertyConverter, Newtonsoft.Json.Serialization.JsonObjectContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerProperty, Newtonsoft.Json.JsonTextReader reader, Bluebeam.Studio.Client.SDK.Sessions.ServerState.Pending.PendingItems.PendingMarkupsData target) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Bluebeam.Studio.Client.SDK.Sessions.ServerState.Pending.PendingItems.PendingMarkupsData newObject, Newtonsoft.Json.JsonTextReader reader, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, string id) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(Newtonsoft.Json.JsonTextReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, object existingValue) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonTextReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, object existingValue) in 
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(Newtonsoft.Json.JsonTextReader reader, System.Type objectType, bool checkAdditionalContent) in 
Newtonsoft.Json.JsonSerializer.DeserializeInternal(Newtonsoft.Json.JsonTextReader reader, System.Type objectType) in 
Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonTextReader reader, System.Type objectType) in 
Newtonsoft.Json.JsonConvert.DeserializeObject(string value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings) in 
Newtonsoft.Json.JsonConvert.DeserializeObject(string value, Newtonsoft.Json.JsonSerializerSettings settings) in
Run Code Online (Sandbox Code Playgroud)

Cas*_*ock 5

解决方案是将"--linkskip = Newtonsoft.Json"添加到其他mtouch参数中.感谢Gusman的建议!