【问题标题】:JSON error in Xamarin.iOS app - Method Not FoundXamarin.iOS 应用程序中的 JSON 错误 - 找不到方法
【发布时间】:2021-11-25 04:56:10
【问题描述】:

自从 Apple 发布 iOS 15 以来,我遇到了一个错误。我的 Xamarin.iOS 项目中有一个方法可以使用 Json 成功解析文件,但它坏了。我想检查一下是否有其他人观察到同样的问题,并提出建议。谷歌搜索没有出现人们谈论它的任何结果,并且在 SO 上搜索术语“JSON”、“iOS”和“15”出现了 6 张与我的问题无关的票。谢谢你尽你所能的帮助。 (我不确定哪些标签适用于这个问题,所以我选择了一些。如果你想调整它们,请随意。)

private void AddPhotoMetadatasToJsonFile(List<PhotoMetadata> metadatas)
{
    var existingMetadatas = GetLocalPhotoList();

    if (existingMetadatas.Count > 0)
    {
        metadatas.AddRange(existingMetadatas);
    }

    var json = JsonSerializer.Serialize(metadatas); //This line throws the exception
    File.WriteAllText(MetadataFile, json);
}

例外:

Method not found: int System.Text.Encodings.Web.TextEncoder.FindFirstCharacterToEncodeUtf8(System.ReadOnlySpan`1<byte>)
[0:]   at System.Text.Json.JsonEncodedText.EncodeHelper (System.ReadOnlySpan`1[T] utf8Value, System.Text.Encodings.Web.JavaScriptEncoder encoder) [0x00000] in <cb68364b029e41c3bf425990b94c94d9>:0 
  at System.Text.Json.JsonEncodedText.TranscodeAndEncode (System.ReadOnlySpan`1[T] value, System.Text.Encodings.Web.JavaScriptEncoder encoder) [0x00033] in <cb68364b029e41c3bf425990b94c94d9>:0 
  at System.Text.Json.JsonEncodedText.Encode (System.ReadOnlySpan`1[T] value, System.Text.Encodings.Web.JavaScriptEncoder encoder) [0x00014] in <cb68364b029e41c3bf425990b94c94d9>:0 
  at System.Text.Json.JsonEncodedText.Encode (System.String value, System.Text.Encodings.Web.JavaScriptEncoder encoder) [0x00014] in <cb68364b029e41c3bf425990b94c94d9>:0 
  at System.Text.Json.JsonSerializer..cctor () [0x00042] in <cb68364b029e41c3bf425990b94c94d9>:0 

【问题讨论】:

标签: ios json xamarin xamarin.ios ios15


【解决方案1】:

我想我找到了一个临时解决方案based on this support ticket。看起来使用 System.Text.Json 编译不正确,但添加 NuGet 包 Newtonsoft 可以正常工作。这是我修改后的代码:

using Newtonsoft.Json;

private void AddPhotoMetadatasToJsonFile(List<PhotoMetadata> metadatas)
{
    var existingMetadatas = GetLocalPhotoList();

    if (existingMetadatas.Count > 0)
    {
        metadatas.AddRange(existingMetadatas);
    }

    using (StreamWriter sw = new StreamWriter(MetadataFile))
    {
        var serializer = new JsonSerializer();
        serializer.Serialize(sw, metadatas);
    }
}

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多