c#序列化问题

lqmzn 2010-07-28 08:29:22
本人做了一个小程序.java做服务器端,序列化对象.然后c#做客户端.反序列化接收.双方都用的是socket,现在java序列化过来以后.

java序列化代码如下:

TestSerial se=new TestSerial();
sout.write
sout.writeObject(se);
sout.flush();
sout.close();


我用C#是这样接收的:

socket.Receive(bytesReceive);
SetText(bytesReceive);

socket.Shutdown(SocketShutdown.Both);
socket.Close();


private void SetText(byte[] data)
{
//反序列化
BinaryFormatter bf = new BinaryFormatter();
object obj = null;
using (Stream stream = new MemoryStream(bb, 0, bb.Length))
{
obj = bf.Deserialize(stream);
}
}

总是报一个错误:二进制流"0"不包含有效的BinaryHeader......
网上查了说是和版本有关.这种问题具体应该改怎么解决啊?
...全文
420 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
请叫我卷福 2010-07-28
  • 打赏
  • 举报
回复
不同的序列化机制 不同的规则 。。。。
zhujian888 2010-07-28
  • 打赏
  • 举报
回复
"总是报一个错误:二进制流"0"不包含有效的BinaryHeader......
网上查了说是和版本有关.这种问题具体应该改怎么解决啊?"


java序列化成 某种二进制格式。
.net去反序列化肯定就格式错误了。

sun和ms又没有制定统一格式。
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
我已经测试了.在java中建了一个客户端.可以正确的读到信息.证明序列化那步没有错.也就是C#反序列化还有毛病.有人提到用xml做中间语言.有没有详细一点的例子呢.期待中...
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lovesoftandhxy 的回复:]
java 将string转为byte[] 发给 C# 接到byte[]转string 显示。。
[/Quote]

我传的是一个类.不是string
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
顶起来
loveSoftandhxy 2010-07-28
  • 打赏
  • 举报
回复
java 将string转为byte[] 发给 C# 接到byte[]转string 显示。。
ttyyadd 2010-07-28
  • 打赏
  • 举报
回复
可以序列化成xml文件这样两语言都可以了
萨拉嘿 2010-07-28
  • 打赏
  • 举报
回复
看你接收到的byte[]是否全是0,也会导致报这个错误。
wuyq11 2010-07-28
  • 打赏
  • 举报
回复
由于无效流,或由于在序列化和反序列化之间的对象版本更改。
http://topic.csdn.net/u/20100527/16/ab6182ac-4bce-4262-bc04-f1d2e13d59e5.html
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soaringbird 的回复:]
你不把用java序列化的内容给C#翻译一下,C#能懂?或者你用它们都懂的语言序列化也行啊
[/Quote]
有例子吗?能说的具体点吗?
soaringbird 2010-07-28
  • 打赏
  • 举报
回复
你不把用java序列化的内容给C#翻译一下,C#能懂?或者你用它们都懂的语言序列化也行啊
lansanhou 2010-07-28
  • 打赏
  • 举报
回复
到这里看看:http://space.xicp.cn/qudou/1499341
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 angry9028 的回复:]

你只会中文 但是想和一个只会西班牙语的人交流 直接沟通肯定会出现错误

所以需要使用一种两个人都会的语言 比如英语

把需要传输的数据先序列化到XML文件中

而XML文件就是起到这个中间语言的作用

任何语言都认识它

恩 白话文版本
[/Quote]

请问有没有XML序列化具体实现的代码贴出来借鉴一下啊.
socket.Receive(bytesReceive);
返回的是bytes[].反序列化还是报错:xml文档(1,1)中有错误.
angry9028 2010-07-28
  • 打赏
  • 举报
回复
你只会中文 但是想和一个只会西班牙语的人交流 直接沟通肯定会出现错误

所以需要使用一种两个人都会的语言 比如英语

把需要传输的数据先序列化到XML文件中

而XML文件就是起到这个中间语言的作用

任何语言都认识它

恩 白话文版本
danjiewu 2010-07-28
  • 打赏
  • 举报
回复
你给老外打电话balabala一堆中文,老外不懂,结果你得出结论老外的电话有问题……
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 soaringbird 的回复:]
根据你要传的内容,定义一个xml的格式,java里把数据按这个格式序列化到一个xml文件中,在C#里按照这个格式定义相应的类型,反序列化数据
[/Quote]

好.我先试试吧
soaringbird 2010-07-28
  • 打赏
  • 举报
回复
根据你要传的内容,定义一个xml的格式,java里把数据按这个格式序列化到一个xml文件中,在C#里按照这个格式定义相应的类型,反序列化数据
lqmzn 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qldsrx 的回复:]
两种语言,不能直接二进制序列化传输,只能自定义XML格式序列化到xml来传输。
[/Quote]

能不能来个高人说的详细点呢?
qldsrx 2010-07-28
  • 打赏
  • 举报
回复
两种语言,不能直接二进制序列化传输,只能自定义XML格式序列化到xml来传输。
纯白油条 2010-07-28
  • 打赏
  • 举报
回复
不会帮顶
加载更多回复(1)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧