I have a bunch of JSON
files set as Embedded resource
in one of my projects. I'm using Newtonsoft.Json
to parse these files:
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;
This throws an exception in Newtonsoft.Json because it can't parse the beginning of the file. What's the best practice in this case? How should I be handling this sort of situations?
Thanks!
That's a byte-order mark (BOM).
I'm assuming your first code block is showing how you get the file. If you want the files in UTF-8 without a BOM, you can use the UTF8Encoding
constructor to build an encoding instance without a BOM:
var str = new UTF8Encoding(false).GetString(result);
Change the encoding of the file - when saving there is a little down arrow that lets you go to advanced saving options, including the encoding.
What you are seeing is the BOM (Byte Order Mark) - it indicates this is a Unicode file (UTF-8 in this case, I believe).
You can also just strip it, which should let it parse without issue.
This is something that is best just dealt with once, when saving the file than repeatedly fixing in code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With