JsonConvert.DeserializeObject 遇到BOM头无法反序列化

最近在一次反序列化Json数据出现一个非常奇怪的问题。

Newtonsoft.Json.JsonReaderException:“Unexpected character encountered while parsing value: . Path '', line 0, position 0.”
image.png
using Newtonsoft.Json;

/// <summary>
/// 含有BOM的Josn字符串,在最前面的"{"前面包含了隐藏的Bom字符,解析会报错
/// </summary>
string fileContent1 = "{\"TestList\":[],\"OtherList\":[]}";
var list1 = JsonConvert.DeserializeObject<object>(fileContent1);


/// <summary>
/// 不含Bom的Json字符串,可正常解析
/// </summary>
string fileContent2 = "{\"TestList\":[],\"OtherList\":[]}";
var list2 = JsonConvert.DeserializeObject<object>(fileContent2);

出现这个问题的场景是这样的,先使用如下代码将对象写入到文件。

StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8)

这样写入的文件数据会包含BOM头。
此时这样从文件中读取出来在反序列化的时候,你极有可能上面的错误。

正确的写法推荐:

using (StreamWriter writer = new StreamWriter("", false, new UTF8Encoding(false)))
{
    writer.Write(jsonString);
}

或者

File.WriteAllText(writeFile, jsonString);

参考链接:
https://blog.csdn.net/Hello_litao/article/details/80526605

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容