Сериализация/десериализация массива байтов в JSON.NET - программирование
Подтвердить что ты не робот

Сериализация/десериализация массива байтов в JSON.NET

У меня есть простой класс со следующим свойством:

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

но это не работает, когда я заполняю свойство Photograph с изображением и передаю через http. Это может показаться простым вопросом, но я еще не нашел решение после поиска в Интернете часами, но как мне сериализовать/десериализовать массив байтов в Json.NET? Какие теги атрибутов мне нужны или я должен делать это по-другому? Большое спасибо!

4b9b3361

Ответ 1

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;
}

Ответ 2

Вы можете преобразовать байт [] в строку, а затем использовать метод JsonConvert для получения объекта:

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

Ответ 3

Если вы используете LINQ to JSON, вы можете сделать это:

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

Результатом будет динамический JObject.

Хотя это может и не быть точно тем, что OP должен был делать, это может пригодиться тем, кто хочет десериализовать byte[], который сталкивается с этим вопросом.