При сериализации я хотел бы сериализовать объект только один раз, тогда любые ссылки на этот объект должны быть сериализованы как ссылка на объект. Это потому, что когда я позже десериализую объекты, я бы хотел сохранить эти ссылки. Чтобы проиллюстрировать мою цель, приведенный ниже код должен вывести «After Serialization: true».
class Program
{
static void Main(string[] args)
{
MyObject obj = new MyObject() { Name = "obj" };
MyObject[] myObjs = new MyObject[]
{
obj, obj
};
Console.WriteLine("Object Refs Equal?");
Console.WriteLine(string.Format("Before Serialization: {0}",
object.ReferenceEquals(myObjs[0], myObjs[1])));
XmlSerializer toXml = new XmlSerializer(typeof(MyObject[]));
using (FileStream toFile = File.Create(@"C:\foo.xml"))
{
toXml.Serialize(toFile, myObjs);
}
XmlSerializer fromXml = new XmlSerializer(typeof(MyObject[]));
using (FileStream fromFile = File.OpenRead(@"C:\foo.xml"))
{
MyObject[] deserialized = (MyObject[])fromXml.Deserialize(fromFile);
Console.WriteLine(string.Format("After Serialization: {0}",
object.ReferenceEquals(deserialized[0], deserialized[1])));
}
Console.ReadLine();
}
}
[Serializable]
public class MyObject
{
public string Name { get; set; }
}