首页 > 解决方案 > 在 Json.NET 中处理字节顺序标记 (BOM) 字符

问题描述

对于 .NET Core 项目,我正在使用一个返回 JSON 格式数据的公共 API。但是,他们的一些(不是全部)响应在字符串的开头有一个 BOM 字符,这会导致 Visual Studio 和 Json.NET 无法将该字符串识别为有效的 JSON。结果,在使用 JsonConvert.DeserializeObject() 将字符串反序列化为我的 POCO 对象时出现错误。API 开发人员告诉我,BOM 是按设计包含的,我应该“设置 Json.Net 以实现这一点”。有没有办法设置 Json.NET 来处理 BOM 而无需手动将其从字符串中剥离?

示例如下,应要求提供。您可以看到 API GET 何时成功完成,我必须从字符串的开头手动修剪 BOM,否则对 DeserializeObject() 的调用会失败,因为字符串不是有效的 JSON。

private static MyPOCO GetObjectFromApi(string url)
{
    MyPOCO poco = new MyPOCO();

    RestClient client = new RestClient(url);
    RestRequest request = new RestRequest(Method.GET);
    IRestResponse response = client.Execute(request);

    if (response.IsSuccessful)
    {
        poco = JsonConvert.DeserializeObject<MyPOCO>(response.Content.TrimStart((char)65279)); // trim the byte order marker character at the start of the string
        //poco = JsonConvert.DeserializeObject<MyPOCO>(response.Content); // this would throw an error because response.Content is not valid JSON
    }
    else
    {
        MyLogger.WriteLog("Api returned failure response");
    }

    return poco;
}

标签: jsonjson.netbyte-order-mark

解决方案


推荐阅读