我的程序正在序列化一个类,并正在通过网络发送它,并在另一端被接收。当接收服务器获取字节数组并尝试对其进行反序列化时,它将导致错误。当我尝试将原始发送的数据与服务器上的新生成的数据进行比较时(使用同一类上的相同函数,例如:尝试查看服务器上的同一函数是否产生相同的结果),结果是完全不同的。 这怎么可能?
我似乎无法弄清楚。
public static byte[] ObjectToByteArray(object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
private static Object ByteArrayToObject(byte[] arrBytes)
{
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(arrBytes, 0, arrBytes.Length);
memStream.Seek(0, SeekOrigin.Begin);
Object obj = binForm.Deserialize(memStream);
return obj;
}
这是我用于序列化的类:
[Serializable]
public class NetworkObject
{
public NetObjectType requestType;
public NetworkObject(NetObjectType type)
{
requestType = type;
}
}
编辑: 这是引发的错误:
在System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()处的在System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo,字符串名称) 在System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor处(String objectName,String [] memberNames,BinaryTypeEnum [] binaryTypeEnumA,Object [] typeInformationA,Int32 [] memberAssemIds,ObjectReader objectReader,Int32 objectId,BinaryAssemblyInfo AssemblyInfo,TableizedToTable ) 在System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped记录)处 在System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)中 在System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.Run()处 在System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize处(HeaderHandler处理程序,__ BinaryParser serParser,布尔值fCheck,布尔值isCrossAppDomain,IMethodCallMessage methodCallMessage) 在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize处(流serializationStream,HeaderHandler处理程序,布尔fCheck,布尔isCrossAppDomain,IMethodCallMessage methodCallMessage) 在System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)处 在X:\ Programming \ VS \ matchmake .net \ matchmaker.net \ matchmaker.net \ Matchmaker \ Network \ SocketManager.cs:line 220中的Matchmaker.Net.Network.SocketManager.ByteArrayToObject(Byte [] arrBytes) 在X:\ Programming \ VS \ matchmake .net \ matchmaker.net \ matchmaker.net \ Matchmaker \ Network \ SocketManager.cs:line 126中的Matchmaker.Net.Network.SocketManager.readAsyncBytes(IAsyncResult result)中
此外,NetObjectType的内容:
public enum NetObjectType
{
CLIENT_REQUEST_SERVER_LIST,
CLIENT_SERVER_RESPONSE_GENERIC,
CLIENT_SERVER_REGISTER_SERVER,
CLIENT_SERVER_UNREGISTER_SERVER,
CLIENT_SERVER_MODIFY_REGISTERED_SERVER,
SERVER_SEND_MATCHMAKE
}
答案 0 :(得分:0)
在公共程序集中实现可序列化的类,该类应由客户端和服务器使用,或使用SerializationBinder来解决由不同名称空间等引起的问题。