#c# #jsonserializer
#c# #jsonserializer
Вопрос:
Я использую Jsonserializer.SerializeObject
попытку преобразовать byte[]
в определенный объект.
Классовая структура сообщения следующая:
public class ProjectMessageQueueMessage
{
public ProjectMessageQueueMessage();
public byte[] MessageData { get; set; }
public string MessageID { get; set; }
public string MessageType { get; set; }
}
И когда я пытаюсь сериализовать его в определенный класс, вот так
byte[] output = JsonSerializer.SerializeObject<ExtendedScanMessage>(message.MessageData);
Я получаю следующую ошибку:
Не удается преобразовать из byte[] в ExtendedScanMessage
Я могу удалить тип, вот так:
byte[] output = JsonSerializer.SerializeObject(message.MessageData);
Но тогда выходные данные не будут сериализованы в мой класс.
Я что-то упускаю?
Комментарии:
1. Да, вам чего-то не хватает,
ExtendedScanMessage
это неbyte[]
. Без какой-либо десериализации он никогда не получит что-то еще. Теперь вы пытаетесь сериализовать этот массив байтов в другой массив байтов. Не уверен, что это значит.2. Сериализация создает строку из объекта. что вы хотите сделать, так это ДЕСЕРИАЛИЗОВАТЬ
3. @Misiakw Но затем сначала из массива байтов в строку.
4. @PatrickHofman да, конечно. он должен создать строку из байта, а затем попытаться
JsonConvert.DeserializeObject<ExtendedScanMessage>(outputAsString)
Ответ №1:
в зависимости от используемой вами кодировки вам следует написать что-то вроде приведенного ниже кода
var outputString = Encoding.Default.GetString(message.MessageData);
var output = JsonConvert.DeserializeObject<ExtendedScanMessage>(outputString);
в зависимости от вашей кодировки вы можете использовать некоторые из следующих:
Encoding.Default
Encoding.ASCII
Encoding.BigEndianUnicode
Encoding.UTF32
Encoding.UTF7
Encoding.UTF8
Encoding.Unicode