Сериализация/десериализация массива байтов в JSON.NET
У меня есть простой класс со следующим свойством:
[JsonObject(MemberSerialization.OptIn)]
public class Person
{
...
[JsonProperty(PropertyName = "Photograph"]
public byte[] Photograph { get; set; }
...
}
но это не работает, когда я заполняю свойство Photograph с изображением и передаю через http.
Это может показаться простым вопросом, но я еще не нашел решение после поиска в Интернете часами, но как мне сериализовать/десериализовать массив байтов в Json.NET? Какие теги атрибутов мне нужны или я должен делать это по-другому?
Большое спасибо!
Ответы
Ответ 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[]
, который сталкивается с этим вопросом.