在Json.NET中处理字节顺序标记(BOM)字符

时间:2018-08-14 19:58:04

标签: json json.net byte-order-mark

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

根据要求提供以下示例。您可以看到API GET成功完成时,我必须从字符串的开头手动修剪BOM,否则,由于字符串无效的JSON,对DeserializeObject()的调用将失败。

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;
}

0 个答案:

没有答案