Сериализовать объект, используя определенный тип

#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