【发布时间】:2017-06-04 16:34:32
【问题描述】:
[已解决] 反序列化“消息”类型的对象时出错。根级数据无效
我有以下用于序列化/反序列化的代码
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;
}
这是它的使用方法
void Send(string MessageType, string Data)
{
Message message = new Message();
message.MessageType = MessageType;
message.MessageData = Data;
byte[] byteData = Serializer.Serialize(message); // SERIALIZE
// Send the data
stream.Write(byteData, 0, byteData.Length);
}
Message Receive()
{
stream.Read(bytes, 0, bytes.Length);
Message message = Serializer.Deserialize(bytes); // DESERIALIZE
return message;
}
我已经尝试了几种不同的东西,我在谷歌上发现了类似的问题,但我无法解决这个问题。我的序列化方式有问题吗?
【问题讨论】:
-
1)
stream成员是如何定义的?Send()和Receive()中的Stream实例是否相同?如果是这样,您是否记得如图所示倒带流。 here。 2) 你的Message类型没有data member attributes 所以它的所有属性都不会被序列化。 -
流是一个NetworkStream,是一个单独的实例,一个在服务端,一个在客户端。
标签: c# serialization datacontractserializer