C# 泛型集合序列化和反序列化问题
时间:2011-12-16
来源:互联网
各位高手,请指定一下,我这个是用Udp协议做的通信程序,现在时发送和接收泛型集合,发送没问题,接收的时候不知道怎么反序列化????报的错是“没有对象“201326592”的映射。”,原因好像是序列化后没有反回来吧!!
/发送数据
public void SendData()
{
try
{
//定义对方主机和端口
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(txtHisIP.Text), int.Parse(txtHisPort.Text));
//实例化并赋值
Users user = new Users();
user.Name = txtName.Text.Trim();
user.Sex = txtSex.Text.Trim();
user.Age = int.Parse(txtAge.Text.Trim());
user.Address = txtAddress.Text.Trim();
user.Phone = ulong.Parse(txtPhone.Text.Trim());
user.Content = txtContent.Text.Trim();
List<Users> list = new List<Users>();
list.Add(user);
//序列化集合
FileStream fs = new FileStream("C:\\go.txt", FileMode.Open); //定义一个文件流
BinaryFormatter bf = new BinaryFormatter(); //二进制方式
bf.Serialize(fs, list); //序列化保存配置文件对象list
fs.Seek(0, SeekOrigin.Begin);
string ss = "";
//读取出来
using (StreamReader sr = new StreamReader(fs))
{
ss = sr.ReadToEnd();
sr.Close();
}
#region 类序列化
////类序列化
//xml = new XmlSerializer(typeof(Users));
//ms = new MemoryStream();
//xml.Serialize(ms, user);
//ms.Seek(0, SeekOrigin.Begin); //将当前流的位置设为指定值
//string str = Encoding.UTF8.GetString(ms.ToArray());
#endregion
//string to byte[]
byte[] by = Encoding.UTF8.GetBytes(ss);
//发送
udpClient.Send(by, by.Length, ipPoint);
toolsStatus.Text = "已发送!";
fs.Close(); //关闭流
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
接收:
//接收任何地址的数据 接收
IPEndPoint point = new IPEndPoint(IPAddress.Any, 0);
//接收数据,储存在byte数组里
byte[] bytes = udpClient.Receive(ref point);
//byte to string
string str = Encoding.UTF8.GetString(bytes); //乱码问题
//反序列化集合
FileStream fs = new FileStream("F:\\go.txt", FileMode.Create);
using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(str); //写入
sw.Close();
}
fs.Close();
FileStream fsf = new FileStream("F:\\go.txt", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
List<Users> list = bf.Deserialize(fsf) as List<Users>; //获取
/发送数据
public void SendData()
{
try
{
//定义对方主机和端口
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(txtHisIP.Text), int.Parse(txtHisPort.Text));
//实例化并赋值
Users user = new Users();
user.Name = txtName.Text.Trim();
user.Sex = txtSex.Text.Trim();
user.Age = int.Parse(txtAge.Text.Trim());
user.Address = txtAddress.Text.Trim();
user.Phone = ulong.Parse(txtPhone.Text.Trim());
user.Content = txtContent.Text.Trim();
List<Users> list = new List<Users>();
list.Add(user);
//序列化集合
FileStream fs = new FileStream("C:\\go.txt", FileMode.Open); //定义一个文件流
BinaryFormatter bf = new BinaryFormatter(); //二进制方式
bf.Serialize(fs, list); //序列化保存配置文件对象list
fs.Seek(0, SeekOrigin.Begin);
string ss = "";
//读取出来
using (StreamReader sr = new StreamReader(fs))
{
ss = sr.ReadToEnd();
sr.Close();
}
#region 类序列化
////类序列化
//xml = new XmlSerializer(typeof(Users));
//ms = new MemoryStream();
//xml.Serialize(ms, user);
//ms.Seek(0, SeekOrigin.Begin); //将当前流的位置设为指定值
//string str = Encoding.UTF8.GetString(ms.ToArray());
#endregion
//string to byte[]
byte[] by = Encoding.UTF8.GetBytes(ss);
//发送
udpClient.Send(by, by.Length, ipPoint);
toolsStatus.Text = "已发送!";
fs.Close(); //关闭流
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
接收:
//接收任何地址的数据 接收
IPEndPoint point = new IPEndPoint(IPAddress.Any, 0);
//接收数据,储存在byte数组里
byte[] bytes = udpClient.Receive(ref point);
//byte to string
string str = Encoding.UTF8.GetString(bytes); //乱码问题
//反序列化集合
FileStream fs = new FileStream("F:\\go.txt", FileMode.Create);
using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(str); //写入
sw.Close();
}
fs.Close();
FileStream fsf = new FileStream("F:\\go.txt", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
List<Users> list = bf.Deserialize(fsf) as List<Users>; //获取
作者: huige2011 发布时间: 2011-12-16
作者: hefeng_aspnet 发布时间: 2011-12-16
我就是看着这些做的
作者: huige2011 发布时间: 2011-12-16
你发送和读取,用string读取都是错误的。
1. 序列化之后的 byte[] 应该直接Send ,保存用 System.IO.File.WriteAllBytes 保存二进制数据文件
而不用做任何编码转换。
2. 读取的话也是直接用 byte[] 转成 MemoryStream 然后反序列化
//读取出来
using (StreamReader sr = new StreamReader(fs))
{
ss = sr.ReadToEnd();
sr.Close();
}
...
byte[] bytes = udpClient.Receive(ref point);
//byte to string
string str = Encoding.UTF8.GetString(bytes); //乱码问题
//反序列化集合
FileStream fs = new FileStream("F:\\go.txt", FileMode.Create);
1. 序列化之后的 byte[] 应该直接Send ,保存用 System.IO.File.WriteAllBytes 保存二进制数据文件
而不用做任何编码转换。
2. 读取的话也是直接用 byte[] 转成 MemoryStream 然后反序列化
//读取出来
using (StreamReader sr = new StreamReader(fs))
{
ss = sr.ReadToEnd();
sr.Close();
}
...
byte[] bytes = udpClient.Receive(ref point);
//byte to string
string str = Encoding.UTF8.GetString(bytes); //乱码问题
//反序列化集合
FileStream fs = new FileStream("F:\\go.txt", FileMode.Create);
作者: fangxinggood 发布时间: 2011-12-16
大哥帮帮忙,搞了一个晚上还是没搞出来,能直接帮我改一下吗。。。。。。。。。拜托啦。。。。
作者: huige2011 发布时间: 2011-12-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28