1. ホーム
  2. c#

[解決済み] Visual Studioで作成したJSONファイルの先頭に "EF BB BF "と表示する

2022-02-01 18:59:03

質問

の束を持っています。 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で例外がスローされます。この場合のベストプラクティスは何でしょうか?このような場合、どのように対処すればよいのでしょうか?

ありがとうございます。

解決方法は?

それはBOM(Byte-Order Mark)です。

最初のコードブロックは、ファイルを取得する方法を示しているのでしょうね。もしBOMなしでUTF-8のファイルが欲しい場合は UTF8Encoding のコンストラクタで BOM のないエンコーディングインスタンスを作成します。

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