0
[解決] 時發生錯誤,反序列化類型「消息」的目的。在根級別的數據無效反序列化時C#的DataContractSerializer異常「中的數據在根級別是無效的」
我有一個序列化下面的代碼/反序列化
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;
}
我嘗試了幾個不同的東西,我已經找到了g oogle來自類似的問題,但我無法解決這個問題。我序列化的方式有什麼問題嗎?
1)如何被定義了'stream'構件? Send()'和Receive()'中的Stream實例是否相同?如果是這樣,你是否記得倒回如圖所示的流。 [這裏](https://stackoverflow.com/a/40296891/3744182)。 2)你的Message類型沒有[數據成員屬性](https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.aspx),所以它的任何屬性都不會被序列化。 – dbc
這個流是一個NetworkStream,它是一個獨立的實例,一個在服務器上,另一個在客戶端。 – MuzzyA