web-dev-qa-db-ja.com

JSON.NETでバイト配列をシリアライズ/デシリアライズします

次のプロパティを持つ単純なクラスがあります。

[JsonObject(MemberSerialization.OptIn)]
public class Person
{
    ...
    [JsonProperty(PropertyName = "Photograph"]
    public byte[] Photograph { get; set; }
    ...
}

しかし、Photographプロパティに画像を入力し、http経由で転送すると、これは機能しません。これは簡単な質問のように聞こえるかもしれませんが、何時間もオンラインで調べた後、まだ解決策を見つけていませんが、Json.NETでバイト配列をシリアライズ/デシリアライズするにはどうすればよいですか?どの属性タグが必要ですか、またはこれを別の方法で行う必要がありますか?どうもありがとう!

28
Steve Randall
public static T Deserialize<T>(byte[] data) where T : class
{
    using (var stream = new MemoryStream(data))
    using (var reader = new StreamReader(stream, Encoding.UTF8))
        return JsonSerializer.Create().Deserialize(reader, typeof(T)) as T;
}
29
Alexey Zimarev

Byte []を文字列に変換し、JsonConvertメソッドを使用してオブジェクトを取得できます。

var bytesAsString = Encoding.UTF8.GetString(bytes);
var person = JsonConvert.DeserializeObject<Person>(bytesAsString);
15
Oliver

LINQ to JSON を使用している場合、これを行うことができます。

JObject.Parse(Encoding.UTF8.GetString(data));

結果は動的なJObjectになります。

これはOPがやろうとしていたことではないかもしれませんが、この質問に出くわすbyte[]をデシリアライズしようとする他の人にとっては便利かもしれません。

5
dana