Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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# 通过tcpclient发送序列化对象时出现问题_C#_Winforms_Serialization - Fatal编程技术网

C# 通过tcpclient发送序列化对象时出现问题

C# 通过tcpclient发送序列化对象时出现问题,c#,winforms,serialization,C#,Winforms,Serialization,我试图通过tcpclient将一个对象从服务器发送到客户端,但收到一个错误。首先,这里是pack类: [Serializable()] public class pack { public int a; } 以下是服务器的发送代码(其命名空间为WindowsFormsApplication1): 以及客户端的“翻译”代码(其命名空间为WindowsFormsApplication2): 错误是: serializationException was un

我试图通过tcpclient将一个对象从服务器发送到客户端,但收到一个错误。首先,这里是pack类:

[Serializable()]
    public class pack
    {
        public int a;
    }
以下是服务器的发送代码(其命名空间为WindowsFormsApplication1):

以及客户端的“翻译”代码(其命名空间为WindowsFormsApplication2):

错误是:

serializationException was unhandeled. Unable to find assembly 'WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

有人能告诉我问题出在哪里吗?

您需要向客户端添加对WindowsFormsApplication1的引用。或者更好的方法是,为客户端和服务器通用的类添加单独的程序集。

您需要向客户端添加对WindowsFormsApplication1的引用。或者更好的方法是,为客户端和服务器都通用的类添加一个单独的程序集。

好的,正如错误消息所说,您的服务器找不到
WindowsFormsApplication1程序集

你在客户端有吗?如果没有包含要反序列化类型的所有程序集,则无法使用二进制反序列化

请注意,名称空间是不相关的,并且您不能仅仅因为在客户端程序集中有一个同名的类型就对对象进行反序列化。程序集名称嵌入到序列化数据中


(就我个人而言,我并不热衷于从使用默认的.NET二进制序列化开始,因为它在向后和向前版本控制方面非常脆弱,但这是另一回事。如果您对替代方案感兴趣,您可能希望查看基于文本的格式,如XML、YAML和JSON,或者二进制格式,如Thrift和Protoc好的,正如错误消息所说,您的服务器找不到
WindowsFormsApplication1
程序集

在客户端有吗?如果没有包含要反序列化类型的所有程序集,则无法使用二进制反序列化

请注意,名称空间是不相关的-您将无法仅因为在客户端程序集中有同名的类型而对对象进行反序列化。程序集名称嵌入在序列化数据中


(就我个人而言,我并不热衷于从使用默认的.NET二进制序列化开始,因为它在向后和向前版本控制方面非常脆弱,但这是另一回事。如果您对替代方案感兴趣,您可能希望查看基于文本的格式,如XML、YAML和JSON,或者二进制格式,如Thrift和Protoc缓冲区。)

我发现了一个关于如何先将对象转换为xml再转换为字符串进行序列化的好教程!

我发现了一个关于如何先将对象转换为xml再转换为字符串进行序列化的好教程!

对于这个问题,您需要编译和组装一个DLL库,然后将其作为两个项目的引用添加。请记住请注意,DLL库中的所有类都必须是
[Serializable]

对于此问题,您需要编译和组装一个DLL库,然后将其添加为两个项目的引用。请记住,DLL库中的所有类都必须是
[Serializable]

好的..据我所知,我需要用pack类创建一个.dll?然后我将研究xml中的导出/导入。Thanks@Badescu嗯,您现有的程序集也会工作。(您也应该强烈考虑以下的.NET命名约定,其中Pascal是类型的)。谢谢你的xml提示。我已经使用过它,它工作得很好。好的。据我所知,我需要用pack类创建一个.dll?然后我将研究用xml导出/导入。Thanks@Badescu嗯,您现有的程序集也会工作。(您也应该强烈考虑以下的.NET命名约定,其中Pascal是类型的)。谢谢你的xml提示。我已经用过了,而且效果很好。
            NetworkStream strm = client.GetStream();
            IFormatter bformatter = new BinaryFormatter();
            pack nettmp = (pack)bformatter.Deserialize(strm);
serializationException was unhandeled. Unable to find assembly 'WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.