关于序列化到内存的问题,详情请进

liming0605 2009-04-30 10:31:42
现在我需要序列化一个Entity,但是只希望他序列化到内存就好了,不需要出实际的物理文件!
因为我只是希望通过序列化取得Entity的字段属性什么的。。
请知道的达人给点代码,,谢谢!
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
coconutyf 2009-05-03
  • 打赏
  • 举报
回复
都没满足就反省一下自己的问题是不是没提明白啊,语言表达能力也很重要呀。
liming0605 2009-04-30
  • 打赏
  • 举报
回复
都没有满足。。
蓝海D鱼 2009-04-30
  • 打赏
  • 举报
回复
对象的序列化
http://www.cnblogs.com/ring1981/archive/2006/07/18/453512.html
.net中对象的序列化是指将对象的状态存储起来,先将对象的字段和属性以及类名转换为字节流,然后再把字节流写入数据流。通过对对象反序列化,得到原对象完全相同的副本。

对象的序列化主要的目的是将对象持久化,经过持久化的对象可以从一个地方传输到另一个地方。


在.net中, IFormatter接口提供了对象序列化的功能。他有两个公有的方法:

反序列化对象方法
Deserialize : Deserializes the data on the provided stream and reconstitutes the graph of objects。

序列化对象方法
Serialize:Serializes an object, or graph of objects with the given root to the provided stream。

我们可以将对象序列化成两种格式:

BinaryFormatter :将对象序列化为二进制格式
SoapFormatter:将对象序列化为Soap格式

代码:

//要进行序列化的类
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace SerializeDemos
6{
7 [Serializable]
8 public class Car
9 {
10 private string _Price;
11 private string _Owner;
12 public string Price
13 {
14 get { return this._Price; }
15 set { this._Price = value; }
16 }
17 public string Owner
18 {
19 get { return this._Owner; }
20 set { this._Owner = value; }
21 }
22 public Car(string o, string p)
23 {
24 this.Price = p;
25 this.Owner = o;
26 }
27 }
28}
29
//序列化以及反序列化对象
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8using System.IO;
9using System.Runtime.Serialization.Formatters.Binary;
10using System.Runtime.Serialization.Formatters.Soap;
11using System.Xml.Serialization;
12
13
14namespace SerializeDemos
15{
16
17 public partial class Form1 : Form
18 {
19 public Form1()
20 {
21 InitializeComponent();
22 }
23 private void Form1_Load(object sender, EventArgs e)
24 {
25
26 }
27
28 private void button1_Click(object sender, EventArgs e)
29 {
30 Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
31 FileStream fileStream = new FileStream("SerializedCar.bin", FileMode.Create);
32 // 用二进制格式序列化
33 BinaryFormatter binaryFormatter = new BinaryFormatter();
34 binaryFormatter.Serialize(fileStream, car);
35 fileStream.Close();
36 MessageBox.Show("Successful");
37 }
38
39 private void button2_Click(object sender, EventArgs e)
40 {
41 Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
42 FileStream fileStream = new FileStream("SerializedCar.Soap", FileMode.Create);
43 // 序列化为Soap
44 SoapFormatter formatter = new SoapFormatter();
45 formatter.Serialize(fileStream, car);
46 fileStream.Close();
47 MessageBox.Show("Successful");
48 }
49
50 private void button3_Click(object sender, EventArgs e)
51 {
52 Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
53 FileStream fileStream = new FileStream("SerializedCar.xml", FileMode.Create);
54 // 序列化为xml
55 SoapFormatter formatter = new SoapFormatter();
56 formatter.Serialize(fileStream, car);
57 fileStream.Close();
58 MessageBox.Show("Successful");
59 }
60
61 private void button4_Click(object sender, EventArgs e)
62 {
63 System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
64 //二进制格式反序列化
65 Stream stream = new FileStream("SerializedCar.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
66 Car mycar = (Car)formatter.Deserialize(stream);
67 stream.Close();
68 MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
69 }
70
71 private void button5_Click(object sender, EventArgs e)
72 {
73 System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
74 //Soap格式反序列化
75 Stream stream = new FileStream("SerializedCar.Soap", FileMode.Open, FileAccess.Read, FileShare.Read);
76 Car mycar = (Car)formatter.Deserialize(stream);
77 stream.Close();
78 MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
79 }
80
81 private void button6_Click(object sender, EventArgs e)
82 {
83 System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
84 //Xml格式反序列化
85 Stream stream = new FileStream("SerializedCar.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
86 Car mycar = (Car)formatter.Deserialize(stream);
87 stream.Close();
88 MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
89 }
90 }
91}
liming0605 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lic_go 的回复:]
这个就是流里的序列化与反序列化以及类型转换问题
认真看好书吧
[/Quote]
…………现在急啊
Garnett_KG 2009-04-30
  • 打赏
  • 举报
回复
可以序列化到MemoryStream啊
Neil198 2009-04-30
  • 打赏
  • 举报
回复
/// <summary>
/// 对象序列化,对象必须具有可序列化标记([Serializable]),且有读写方法的公共属性(public)
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="serialObject"></param>
/// <returns></returns>
public static string Serialization(Type type, object serialObject)
{
StringBuilder sb = new StringBuilder();
TextWriter writer = new StringWriter(sb);
XmlSerializer serializer = new XmlSerializer(type);
serializer.Serialize(writer, serialObject);

string result = sb.ToString().Replace("utf-16", "utf-8");
return result;
}


/// <summary>
/// 对象反序列化
/// </summary>
/// <param name="type"></param>
/// <param name="content">xml</param>
/// <returns></returns>
public static object Deserialization(Type type, string xmlString)
{
// XmlTextReader tr = new XmlTextReader(new StringReader(xmlString));
XmlReader reader = XmlReader.Create(new StringReader(xmlString));
XmlSerializer serializer2 = new XmlSerializer(type);
return serializer2.Deserialize(reader);
}
lic_go 2009-04-30
  • 打赏
  • 举报
回复
这个就是流里的序列化与反序列化以及类型转换问题
认真看好书吧
liming0605 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wartim 的回复:]
从流里反系列化出来就是一个object了么,把object强行转换一下类型不可以了
[/Quote]
跟一楼说的一样的?
wartim 2009-04-30
  • 打赏
  • 举报
回复
从流里反系列化出来就是一个object了么,把object强行转换一下类型不可以了
coconutyf 2009-04-30
  • 打赏
  • 举报
回复
public static MemoryStream Serialize_Binary(object obj)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.AssemblyFormat = FormatterAssemblyStyle.Full;
bf.TypeFormat = FormatterTypeStyle.TypesAlways;
bf.Serialize(ms, obj);
return ms;
}

public static object Deserialize_Binary(MemoryStream ms)
{
ms.Seek(0, SeekOrigin.Begin);
BinaryFormatter bf = new BinaryFormatter();
bf.AssemblyFormat = FormatterAssemblyStyle.Full;
bf.TypeFormat = FormatterTypeStyle.TypesAlways;
object obj = bf.Deserialize(ms);
return obj;
}

111,126

社区成员

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

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

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