プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2020/04/15

[C#] バイト配列のシリアライズ

event_note2020/04/15 6:11

Newtonsoft.json でバイト配列をシリアライズすると、BASE64 にエンコードされて出力されてしまいます。

var foo = new Foo { Data = new byte[] { 0x48, 0x49, 0x1d, 0x52, 0x53, 0x1d, 0x56, 0x57, 0x00 } };
var json = JsonConvert.SerializeObject(foo);
Console.WriteLine(json); 
public class Foo
{
    public byte[] Data { get; set; } 
}

出力結果

{"Data":"SEkdUlMdVlcA"}

個人的には以下のように出力されることを期待していました。

{"Data":[48, 49, 1D, 52, 53, 1D, 56, 57, 00]}

解決策

配列ではなくリストを使うと解決されるという記事を見て、上記のコードを変更したら期待した出力になりました。

しかし、他のケースではリストでも BASE64 で出力される場合があったりしたので、素直に int に変更しました。