[解决] 反序列化' Message'类型的对象时出错。根级别的数据无效
我有以下用于序列化/反序列化的代码
import numpy as np
import pandas as pd
import seaborn.apionly as sns
import matplotlib.pyplot as plt
iterables = [[2016, 2017], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
index = pd.MultiIndex.from_product(iterables, names=['Year', 'Month'])
df = pd.DataFrame({"values":np.random.rand(24)}, index=index)
df2 = df.reset_index() # or, df.reset_index(inplace=True) if df is not required otherwise
g = sns.lmplot(x="Month", y="values", data=df2, hue="Year")
plt.show()
这是我正在序列化的课程
public static byte[] Serialize(object Object)
{
using (var memoryStream = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(Object.GetType());
serializer.WriteObject(memoryStream, Object);
return memoryStream.ToArray();
}
}
public static Type Deserialize<Type>(byte[] SerializedData)
{
using (var memoryStream = new MemoryStream(SerializedData))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(Type));
return (Type)serializer.ReadObject(memoryStream);
}
}
以下是如何使用
[DataContractAttribute]
public class Message
{
public string MessageType = string.Empty;
public string MessageData = string.Empty;
}
我已经尝试了几个与谷歌类似问题我发现的不同的东西,但我无法解决这个问题。我序列化的方式有问题吗?
答案 0 :(得分:1)
<强> [解决] 强>
有两个问题。第一个问题是[DataContractAttribute]需要[Serializable]
[Serializable]
public class Message
{
public string MessageType = string.Empty;
public string MessageData = string.Empty;
}
其次与上面代码中不可见的内容有关。 'bytes'数组初始化为大于接收数据的大小,导致Deserializer无法正常工作。
我刚创建了一个具有相应大小的新数据数组,以传递给Deserializer
Message Receive()
{
int messageLength = stream.Read(bytes, 0, bytes.Length);
byte[] data = new byte[messageLength];
Array.Copy(bytes, data, messageLength);
Message message = Serializer.Deserialize(data); // DESERIALIZE
return message;
}