求教,网络传输中如何序列化自定义对象?

guoxijun 2011-09-22 06:11:40
假如现在有这样一个结构体:
struct Student
{
public int num;
public string name;
ArrayList score;
}

发送端和接受端的序列化函数和反序列化函数该怎样写?
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
li2422121715 2011-09-23
  • 打赏
  • 举报
回复

[Serializable]//利用api将结构体序列化
struct Student
{
public int num;
public string name;
ArrayList score;
}
public System.IO.MemoryStream SerializeBinary(object request)//序列化函数,细节不解释了吧
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
serializer.Serialize(memStream,request);
return memStream;
}
public object DeSerializeBinary(System.IO.MemoryStream memStream)//反序列化
{
memStream.Position = 0;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
object newobj = deserializer.Deserialize(memStream);
memStream.Close();
return newobj;
}
Student s=new Student();
s.num=1;//等于多少你自己定
s.name=2;
s.score={东西};
byte[] Data=SerializeBinary(s).ToArray();
最后你自己写个方法send(Data)即可。
反序列化是一样的,你自己能写的。
因为有一大部分是当直接手写的,没经过检查,细节上没完善,你修改下。
guoxijun 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 li2422121715 的回复:]

这个我懂得不少,只是这回我是来打酱油的
[/Quote]

求指教,急需解决这个问题。谢谢啦
li2422121715 2011-09-22
  • 打赏
  • 举报
回复
这个我懂得不少,只是这回我是来打酱油的
TNight 2011-09-22
  • 打赏
  • 举报
回复

[Serializable]
class student
{
public int stuid { get; set; }
public string stuname { get; set; }
public int stuage { get; set; }
}
TNight 2011-09-22
  • 打赏
  • 举报
回复

#region stu数组 序列化和反序列化
student[] st = new student[1];
st[0] = new student();
st[0].stuid = 23;
st[0].stuage = 23;
st[0].stuname = "猪";

FileStream fs = new FileStream(@"D:\log.txt", FileMode.Open, FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, st);
StreamWriter sw = new StreamWriter(fs);
fs.Flush();
fs.Close();

FileStream fs1 = new FileStream(@"d:\log.txt", FileMode.Open, FileAccess.Read);
BinaryFormatter bf1 = new BinaryFormatter();
student[] s = (student[])bf.Deserialize(fs);
foreach (student si in s)
{
Console.WriteLine("{0},{1},{2}", si.stuid, si.stuname, si.stuage);
}
fs.Flush();
fs.Close();
#endregion
guoxijun 2011-09-22
  • 打赏
  • 举报
回复
那该怎么转换序列化成Byte[]来发送了?
cannel 2011-09-22
  • 打赏
  • 举报
回复
以下是对一个类的序列化和反序列化

序列化
XmlSerializer tXmlSerializer = new XmlSerializer(typeof(DUPStatTemplate));
StreamWriter tStreamWriter = new StreamWriter(fileDirectory + tDUPStatTemplate.TemplateName + "_"
+ tDUPStatTemplate.GUID + ".xml");
tXmlSerializer.Serialize(tStreamWriter, tDUPStatTemplate);
tStreamWriter.Close();

反序列化
XmlSerializer tXmlSerializer = new XmlSerializer(typeof(DUPStatTemplate));
StreamReader tStreamReader = new StreamReader(filePath);
DUPStatTemplate tDUPStatTemplate = tXmlSerializer.Deserialize(tStreamReader) as DUPStatTemplate;
tStreamReader.Close();
noway8881 2011-09-22
  • 打赏
  • 举报
回复
BinaryFormatter里有public object Deserialize(Stream serializationStream)
以及public void Serialize(Stream serializationStream, object graph)


110,557

社区成员

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

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

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