最近在一次反序列化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