You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:39:03