Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化异常:找不到程序集_C#_Sockets_Serialization_Deserialization - Fatal编程技术网

C# 反序列化异常:找不到程序集

C# 反序列化异常:找不到程序集,c#,sockets,serialization,deserialization,C#,Sockets,Serialization,Deserialization,我正在序列化一些数据,如字段和自定义类,以创建二进制数据(字节数组) 然后我想将它从二进制数据反序列化回字段和类 但我有个例外。如果这两种方法发生在同一个程序集中,那么它们都可以正常工作,但事实并非如此 我在一个包中进行序列化,在另一个包中进行反序列化。这也是一句名言: 找不到程序集“MyAssamblyName,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”。 注1:我在取回字段方面没有问题,只是类导致了它们 注意2:我在两个程序集中都有相同的类。所有包含反序列化

我正在序列化一些数据,如字段和自定义类,以创建二进制数据(字节数组)

然后我想将它从二进制数据反序列化回字段和类

但我有个例外。如果这两种方法发生在同一个程序集中,那么它们都可以正常工作,但事实并非如此

我在一个包中进行序列化,在另一个包中进行反序列化。这也是一句名言:
找不到程序集“MyAssamblyName,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”。

注1:我在取回字段方面没有问题,只是类导致了它们


注意2:我在两个程序集中都有相同的类。

所有包含反序列化对象的类层次结构中的类的程序集必须存在于执行此反序列化的应用程序中。它们可以被显式引用(如果需要这些类的编译时安全性),也可以只放在应用程序的
bin
文件夹中,以便在运行时解析它们。如果没有显式引用它们,则必须使用反射才能从反序列化实例读取值

注2:我在两个程序集中都有相同的类

不,你没有。至少,就运行时而言不是这样。您有两种不同的类型,它们恰好具有相同的名称。类型由其程序集定义。因此,AssemblyA中的“
SomeType
”与AssemblyB中的“
SomeType
”完全不同,即使它们恰好是从同一源文件编译的

BinaryFormatter使用类型信息,所以这不起作用。一种选择是将该类型移动到其他两个项目都引用的库dll中,然后只定义一次,这样就很好了


另一种选择是使用基于约定的序列化程序(而不是基于类型的序列化程序)。这意味着“看起来足够相似的类”是可以的,即使它们在不同的程序集中(并且可能有不同的源,只要它“足够相似”)。适用于此的序列化程序示例包括(加上其他一些)XmlSerializer、DataContractSerializer(但不是NetDataContractSerializer)、JavaScriptSerializer或protobuf net(如果需要密集的原始二进制文件)。

K。。。上下文我们是否应该假设您正在使用BinaryFormatter?序列化的类型:是否在两个项目都引用的程序集中?您是否意外地通过事件序列化了比预期更多的数据?(这种情况经常发生)是的,我使用BinaryFormatter。我想选择你的第一个选择。所以,我必须创建一个新项目,并将它们添加到其他两个项目中?我说的对吗?在解决方案中,添加一个新项目-选择“library”。现在将类放在那里,并将其与其他两个地方隔开。最后,对于两个原始项目:引用,添加引用。。。选择您刚刚创建的新库项目。这就是我刚才所做的!Thxa lot mate。将让您知道它是否有效(但我知道它会:)。有效,但类数据为null。但这是我现在要解决的问题。再来一次。