" EF BB BF"在Visual Studio中创建的JSON文件的开头

时间:2017-05-21 15:00:57

标签: c# .net json json.net

我的一个项目中有一堆JSON个文件设置为Embedded resource。我使用Newtonsoft.Json来解析这些文件:

public static string ReadStringFromStream(string streamName)
{
    using (System.IO.Stream stream = new EmbeddedResourceReader().GetType().Assembly.GetManifestResourceStream(streamName))
    {
        byte[] result = new byte[stream.Length];
        stream.Read(result, 0, (int)stream.Length);
        var str = Encoding.UTF8.GetString(result);
        return str;
    }
}
...

var traits = JsonConvert.DeserializeObject<Genre[]>(EmbeddedResourceReader.ReadStringFromStream("LNTCore.Genres.json"));
Genres = traits;

这会在Newtonsoft.Json中引发异常,因为它无法解析文件的开头。在这种情况下,最佳做法是什么?我应该如何处理这种情况?

谢谢!

2 个答案:

答案 0 :(得分:8)

这是一个字节顺序标记(BOM)。

我假设您的第一个代码块显示您是如何获取该文件的。如果您想要没有BOM的UTF-8文件,可以使用UTF8Encoding构造函数构建一个没有BOM的编码实例:

var str = new UTF8Encoding(false).GetString(result);

答案 1 :(得分:0)

更改文件的编码 - 保存时会有一个向下箭头,可让您转到高级保存选项,包括编码。

您所看到的是BOM(字节顺序标记) - 它表示这是一个Unicode文件(在这种情况下,我认为是UTF-8)。

你也可以剥离它,这应该让它解析而没有问题。

这是保存文件时最好只处理一次,而不是重复修复代码。