我在设备上尝试反序列化JSON时遇到了ArgumentNullException。以下是确切的错误信息:
我阅读了此线程,并意识到这是一个链接问题。我的项目在构建到设备时设置为Link All,由于大小限制,将其更改为Don't Link不可行。
我检查了json文本,并发现它正在尝试反序列化的类型,然后转到该类并将其标记为Preserve(AllMembers = true)。我还将相同的属性添加到任何在该类中使用的用户定义类中。但我仍然遇到了同样的错误。我还添加了--linkskip=AssemblyName到其他mtouch参数中,但没有成功。
有人有什么提示吗?至少有没有办法从Xamarin那里获取更多有用的信息?当异常发生时,它会带我到一个似乎随机的行 - 与该类无关的事件声明 - 并且单击堆栈中的方法没有任何作用。 我不知道“方法”参数是什么。
以下是从ReadObject调用之后开始的堆栈:
这里是调用代码:
private TMetadata ReadObject(string path)
{
var data = File.ReadAllText(path);
var obj = JsonConvert.DeserializeObject(data, _settings);
return (TMetadata) obj;
}
我阅读了此线程,并意识到这是一个链接问题。我的项目在构建到设备时设置为Link All,由于大小限制,将其更改为Don't 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