此平台不支持Xamarin.iOS操作。Newtonsoft.Json.Utilities.DynamicReflectionDelegateFactory.CreateDynamicMethod

时间:2018-12-09 10:17:16

标签: c# xamarin.forms xamarin.ios json.net

我正在使用Xamarin.Forms进行跨平台项目。在我的项目中,我正在使用API​​通过用户名和密码登录。当我尝试登录Android和UWP平板电脑时,它可以完美运行。但是,当我想登录我的iOS项目时,它会抛出一个异常,内容为:

  

System.PlatformNotSupportedException:不支持以下操作:   这个平台。

我的代码的这一行引发了异常:

HttpContent content = new FormUrlEncodedContent(keyValuePairs);
HttpResponseMessage response = await httpClient.PostAsync("token", content);

这是完整的StackTrace:

  在System.Reflection.Emit.DynamicMethod..ctor中的

(System.String名称,   System.Type returnType,System.Type [] parameterTypes,System.Type   所有者,System.Boolean skipVisibility)[0x00006]在   /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.11/src/Xamarin.iOS/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.notsupported.cs:62

     在

  Newtonsoft.Json.Utilities.DynamicReflectionDelegateFactory.CreateDynamicMethod   (System.String名称,System.Type returnType,System.Type []   parameterTypes,System.Type所有者)[0x00000]在   /_/Src/Newtonsoft.Json/Utilities/DynamicReflectionDelegateFactory.cs:45

     

在Newtonsoft.Json.Utilities.DynamicReflectionDelegateFactory.CreateDefaultConstructor [T]   (System.Type类型)[0x00000]在   / _ / Src / Newtonsoft.Json / Utilities / DynamicReflectionDelegateFactory.cs:244

     在

  Newtonsoft.Json.Serialization.DefaultContractResolver.GetDefaultCreator   (System.Type createdType)[0x00000]在   /_/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs:780

     在

  Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract   (Newtonsoft.Json.Serialization.JsonContract合同)[0x0008b]在   /_/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs:813

     在

  Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract   (System.Type objectType)[0x00007]在   /_/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs:340

     在

  Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract   (System.Type objectType)[0x0010f]在   /_/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs:1249

     在

  System.Collections.Concurrent.ConcurrentDictionary 2[TKey,TValue].GetOrAdd (TKey key, System.Func 2 [T,TResult] valueFactory)[0x00034]在   /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.11/src/Xamarin.iOS/external/corefx/src/System.Collections.Concurrent/src/System/Collections/Concurrent/ConcurrentDictionary.cs:1003      

在Newtonsoft.Json.Utilities.ThreadSafeStore`2 [TKey,TValue] .Get(TKey   键)[0x00000]在   /_/Src/Newtonsoft.Json/Utilities/ThreadSafeStore.cs:64

     在

  Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract   (系统类型类型)[0x0000b]在   /_/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs:198

     在

  Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe   (系统类型类型)[0x0000b]在   / _ / Src / Newtonsoft.Json / Serialization / JsonSerializerInternalReader.cs:133

     在

  Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize   (Newtonsoft.Json.JsonReader阅读器,System.Type objectType,   System.Boolean checkAdditionalContent)[0x0000e]在   / _ / Src / Newtonsoft.Json / Serialization / JsonSerializerInternalReader.cs:143

     在Newtonsoft.Json.JsonSerializer.DeserializeInternal中的

  (Newtonsoft.Json.JsonReader阅读器,System.Type objectType)[0x00046]   在/_/Src/Newtonsoft.Json/JsonSerializer.cs:907

     在

  Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader   阅读器,System.Type objectType)[0x00000]在   /_/Src/Newtonsoft.Json/JsonSerializer.cs:886

     在

  Newtonsoft.Json.JsonConvert.DeserializeObject(System.String值,   System.Type类型,Newtonsoft.Json.JsonSerializerSettings设置)   /_/Src/Newtonsoft.Json/JsonConvert.cs:830

中的[0x0002d]      在

  Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String值,   Newtonsoft.Json.JsonSerializerSettings设置)[0x00000]在   /_/Src/Newtonsoft.Json/JsonConvert.cs:786

     在

  Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String值)   /_/Src/Newtonsoft.Json/JsonConvert.cs:719

中的[0x00000]      在

  Restaurant.Core.DataServices.LoginDataService + d__0.MoveNext()   [0x00222]在   C:\ Projects \ Restaurant \ Restaurant \ Restaurant.Core \ DataServices \ LoginDataService.cs:44

     

---从上一个引发异常的位置开始的堆栈结束---
  在   Restaurant.Core.ViewModels.Login.LoginViewModel + d.MoveNext   ()[0x00058] in   C:\ Projects \ Restaurant \ Restaurant \ Restaurant.Core \ ViewModels \ Login \ LoginViewModel.cs:78

     

---从上一个引发异常的位置开始的堆栈结束---
  在   Restaurant.Core.Helpers.ExceptionHandler + d__3.MoveNext   ()[0x000f6] in   C:\ Projects \ Restaurant \ Restaurant \ Restaurant.Core \ Helpers \ ExceptionHandler.cs:38

我用Google搜索它,最后发现Xamarin.iOS具有some limitations。 Xamarin.iOS中没有System.Reflection.Emit。

我想Newtonsoft.Json或Xamarin本身有问题,但是我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

有三种方法可以解决此问题:

  1. 找出导致问题的确切原因,并尝试找到适合您的替代方法
  2. 尝试安装一些较旧(或更新,如果可用)的NewtonSoft Json版本,并查看其是否有效
  3. 将问题提交给NewtonSoft并等待/直到他们处理:https://github.com/JamesNK/Newtonsoft.Json/issues

您也可以将该问题提交给Xamarin,但是显然,这是他们目前的技术决定,因此您不能指望他们会如此紧急,甚至不愿意解决它。 / p>

相关问题