Xamarin.iOS适配iOS15后JsonSerializer.Serialize抛出方法找不到错误
问题根因
这个异常是iOS 15发布后Xamarin.iOS框架内置的System.Text.Encodings.Web程序集版本过低导致的:项目引用的高版本System.Text.Json依赖FindFirstCharacterToEncodeUtf8这个新增API,但Xamarin.iOS自带的低版本程序集没有实现该方法,运行时就会触发方法找不到的错误。
可行解决方案
方案1:强制升级对应依赖包
- 打开Xamarin.iOS项目的NuGet包管理界面
- 手动搜索安装
System.Text.Encodings.Web的5.0.0及以上稳定版本 - 确认
System.Text.Json的版本与刚安装的System.Text.Encodings.Web版本兼容,推荐同版本号安装 - 清理项目缓存,删除bin、obj文件夹后重新编译运行即可
方案2:修改序列化配置绕过API依赖
如果升级包后仍有冲突,可以通过自定义序列化配置跳过默认编码器调用,修改你的代码如下:
private void AddPhotoMetadatasToJsonFile(List<PhotoMetadata> metadatas) { var existingMetadatas = GetLocalPhotoList(); if (existingMetadatas.Count > 0) { metadatas.AddRange(existingMetadatas); } // 指定宽松编码器,绕过缺失API调用 var serializeOptions = new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; var json = JsonSerializer.Serialize(metadatas, serializeOptions); File.WriteAllText(MetadataFile, json); }
方案3:降级System.Text.Json版本
如果以上方案都不适用,可以将System.Text.Json的NuGet包版本降级到4.x系列,该版本区间不依赖缺失的API,不会触发本次错误。
内容的提问来源于stack exchange,提问作者Nate W
相关产品推荐
相关产品推荐

