如何序列化引用对象

JL99000 2010-11-03 01:11:19
[Serializable]
public class MySerialClass
{
public MySerialClass()
{

}
public List<Maker> AllMakers
{
get;
set;
}
public Book Book
{
get;
set;
}
}
public class Book
{
public string name;
public Maker maker;
public Book()
{
}
public Book(string name,Maker maker)
{
this.name = name;
this.maker = maker;
}
}
[Serializable]
public class Maker
{
public string name;
public Maker()
{
}
public Maker(string name)
{
this.name = name;
}
}

以上是序列化的类

string strFile = "c:\\MySerialClass.xml";

public void Serialize(MySerialClass mc)
{
using (FileStream fs = new FileStream(strFile, FileMode.Create))
{
XmlSerializer formatter = new XmlSerializer(typeof(MySerialClass));
formatter.Serialize(fs, mc);
}
}

public MySerialClass DeSerialize()
{
MySerialClass mc;
using (FileStream fs = new FileStream(strFile, FileMode.Open))
{
XmlSerializer formatter = new XmlSerializer(typeof(MySerialClass));
mc = (MySerialClass)formatter.Deserialize(fs);
}
return mc;
}

private void btn_Save_Click(object sender, EventArgs e)
{
//this.graphControl1.Serialize();

MySerialClass mc = new MySerialClass();
Maker maker = new Maker("m1");
List<Maker> makerList = new List<Maker>();
makerList.Add(maker);
mc.AllMakers = makerList;
Book b = new Book("b1", makerList[0]);
mc.Book = b;
Serialize(mc);
}

private void btn_ReDraw_Click(object sender, EventArgs e)
{
//this.graphControl1.DeSerialize();

MySerialClass mc = DeSerialize();
}

以上是序列化的方法



我的问题是:

Book类中的Maker属性引用的是MySerialClass属性AllMakers中的一个对象

但是在序列化时保存的是两个对象(我想要实现的保存一个对象,同时有一个对该对象的引用),另外反序列化时只调用一次Maker的构造函数



请指教

...全文
172 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL99000 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyazhe 的回复:]
但是在序列化时保存的是两个对象(我想要实现的保存一个对象,同时有一个对该对象的引用),另外反序列化时只调用一次Maker的构造函数

创建对象要执行构造函数,创建2个对象调用一次构造函数,这和序列化没关系,估计你需要考虑下自己的设计,为什么要设计一个和基本规则相矛盾的设计。
[/Quote]

我觉得我的设计应该是没问题的,Book对象中maker是对一个已经存在的对象的引用,这完全符合常规

我感觉我的问题归根到底是XmlSerializer是否能实现对某个对象的引用
兔子-顾问 2010-11-03
  • 打赏
  • 举报
回复
但是在序列化时保存的是两个对象(我想要实现的保存一个对象,同时有一个对该对象的引用),另外反序列化时只调用一次Maker的构造函数

创建对象要执行构造函数,创建2个对象调用一次构造函数,这和序列化没关系,估计你需要考虑下自己的设计,为什么要设计一个和基本规则相矛盾的设计。

110,502

社区成员

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

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

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