[RESOLU] Il y avait une erreur désérialisation l'objet de type « message ». Les données au niveau de la racine est invalideexception C# DataContractSerializer lorsque désérialisation « Les données au niveau racine est invalide »
je le code suivant pour sérialisation/désérialisation
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);
}
}
C'est la classe que je suis sérialisation
[DataContractAttribute]
public class Message
{
public string MessageType = string.Empty;
public string MessageData = string.Empty;
}
Voici comment il est utilisé
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;
}
J'ai essayé plusieurs choses que j'ai trouvées sur g oogle à partir de problèmes similaires, mais je ne peux pas résoudre le problème. Y a-t-il quelque chose qui ne va pas dans la façon de sérialiser?
1) Comment est le membre 'stream' défini? Est-ce la même instance 'Stream' dans' Send() 'et' Receive() '? Si oui, vous souvenez-vous de rembobiner le flux comme indiqué par exemple. [ici] (https://stackoverflow.com/a/40296891/3744182). 2) Votre type 'Message' n'a pas [attributs de membre de données] (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.aspx) donc aucune de ses propriétés ne sera sérialisée. – dbc
Le flux est un NetworkStream et est une instance distincte, une sur le serveur et une sur le client. – MuzzyA