json - 在 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;
}
解决方案
推荐阅读
- android - 是否可以在 Android 上读取与第三方应用程序的 NFC 通信?
- flutter - 在 Flutter 应用的每个视图底部显示音乐播放器
- python - 在 for 循环的初始运行期间使用列表中的第二个值执行操作
- java - 如果我在 Spring Data JDBC 中使用没有 @Id 的实体类,我会遗漏什么吗?
- wordpress - 是否使用旧的购买主题进行网站开发?
- machine-learning - 在 Keras 中合并顺序模型
- webpack - 尝试在 Webpack 5 中使用 StockX API 失败
- javascript - 如何在 svelte 项目中配置 sass 和 ESLint?
- java - 无法从其他类读取 Int
- c++ - C++ 中的二进制字面量