对于.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;
}