二进制序列化 C#:反序列化方法给我例外

本文关键字:方法 反序列化 序列化 二进制 | 更新日期: 2023-09-27 18:34:05

我在套接字之间通信的 Wpf 应用程序中遇到序列化/反序列化问题。详细内容:在这两个应用程序中我有一个实现 ISerializable 的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace GraficaClient
{
    [Serializable()]    //Set this attribute to all the classes that want to serialize
    class SerializerObject : ISerializable
    {
        public String type;
        public String txt;
        /*public String rft;
        public Byte[] audio;
        public Byte[] img;
        */
        public SerializerObject()
        {
        }
        //Deserialization constructor.
        public SerializerObject(SerializationInfo info, StreamingContext ctxt)
        {
            //Get the values from info and assign them to the appropriate properties
            type = (String)info.GetValue("type", typeof(String));
            txt= (String)info.GetValue("txt", typeof(String));
            /*   rft = (String)info.GetValue("rft", typeof(String));
            audio = (Byte[])info.GetValue("audio", typeof(Byte[]));
            img = (Byte[])info.GetValue("img", typeof(Byte[]));*/
        }
        //Serialization function.
        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("type", type);
            info.AddValue("txt", txt);
            /*info.AddValue("rft", rft);
            info.AddValue("audio",audio);
            info.AddValue("img", img);*/
        }
    }
}

在我的一个应用程序中,我输入了信息(在这种情况下只有拖曳字符串(并在流中序列化它

TcpClient c = new TcpClient();
SerializerObject o = new SerializerObject();
o.type="t";
o.text="hello";
c.Connect(ip,port);
NetworkStream stream = c.GetStream();
BinaryFormatter bformatter = new BinaryFormatter();
bformatter.Serialize(stream, o);

在另一边

TcpClient client = server.AcceptTcpClient(); 
NetworkStream stream = client.GetStream();
BinaryFormatter b = new BinaryFormatter();
SerializerObject o= (SerializerObject)b.Deserialize(stream);

此说明给了我一个例外mscorlib 中发生了类型为"System.Runtime.Serialization.SerializationException"的第一次机会异常.dll

如果我打印 e.message="不可能找到 l'assembly 'ProgettoServerV2, 版本=1.0.0.0, 文化=中性, 公钥令牌=空'。

e.stacktrace= in System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly((''r' in System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType

(BinaryAssemblyInfo assemblyInfo, String name(''r' in System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable(''r' in System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record(''r' in System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum(''r' in System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run((''r' in System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage(''r' in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck,Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage(''r' in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream(''r' in GraficaClient.GestoreClipboard.gestioneClipboard(( in c:''Users''pietro''Desktop''GraficaClient''GraficaClient''GestoreClipboard.cs:riga 91

目前我正在使用VisualStudio 2013。我该如何解决它。

二进制序列化 C#:反序列化方法给我例外

确保程序可以加载缺少的程序集。错误消息中有什么难理解的?遇到我在你的页面长帖子中引用你唯一相关的信息:

e.message="不可能找到l'assembly 'ProgettoServerV2, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null'.">

确保此程序集可用,并且反序列化将正常工作。