web-dev-qa-db-fra.com

Sérialiser / désérialiser un tableau d'octets dans JSON.NET

J'ai une classe simple avec la propriété suivante:

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

mais cela ne fonctionne pas lorsque je remplis la propriété Photograph d'une image et que je la transfère via http. Cela peut sembler être une question simple, mais je n'ai pas encore trouvé de solution après avoir cherché en ligne pendant des heures, mais comment sérialiser/désérialiser un tableau d'octets dans Json.NET? De quelles balises d'attribut ai-je besoin ou dois-je procéder autrement? Merci beaucoup!

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

Vous pouvez convertir l'octet [] en chaîne, puis utiliser la méthode JsonConvert pour obtenir l'objet:

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

Si vous utilisez LINQ to JSON , vous pouvez le faire:

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

Le résultat sera un JObject dynamique.

Bien que ce ne soit pas exactement ce que le PO cherchait à faire, cela pourrait être utile pour d'autres qui cherchent à désérialiser un byte[] qui rencontrent cette question.

5
dana