【问题标题】:Serialize object using specific type使用特定类型序列化对象
【发布时间】:2016-10-20 15:19:41
【问题描述】:

我正在使用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);

但是输出不会被序列化到我的班级。

我错过了什么吗?

【问题讨论】:

  • 是的,你错过了 ExtendedScanMessage 不是 byte[] 的东西。如果没有某种反序列化,它将永远不会得到其他东西。您现在正尝试将该字节数组序列化为另一个字节数组。不知道这意味着什么。
  • 序列化从对象生成字符串。你想要做的是反序列化
  • @Misiakw 但是首先从字节数组到字符串。
  • @PatrickHofman 是的,当然。他应该从字节制作字符串,而不是尝试JsonConvert.DeserializeObject&lt;ExtendedScanMessage&gt;(outputAsString)

标签: c# jsonserializer


【解决方案1】:

根据您使用的编码,您应该在下面的代码中编写类似的内容

var outputString = Encoding.Default.GetString(message.MessageData);
var output = JsonConvert.DeserializeObject<ExtendedScanMessage>(outputString);

根据您的编码,您可以使用以下一些: Encoding.DefaultEncoding.ASCIIEncoding.BigEndianUnicodeEncoding.UTF32Encoding.UTF7Encoding.UTF8Encoding.Unicode

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多