using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace TestObjectManager
{
class Program
{
static void Main(string[] args)
{
SerializationInfo infoClass1 =new SerializationInfo(typeof(SampleClass1), new FormatterConverter());
SamplesStructure sampleStruct = new SamplesStructure();
sampleStruct.VarInt = 100;
infoClass1.AddValue("objSampleClass1", sampleStruct);
SerializationInfo infoClass2 = new SerializationInfo(typeof(SampleClass2), new FormatterConverter());
infoClass2.AddValue("VarInt", 4);
ObjectManager objMan = new ObjectManager(null, new StreamingContext(StreamingContextStates.All, null));
object obj = infoClass1.GetValue("objSampleClass1", typeof(SamplesStructure));
objMan.RegisterObject(obj, 2, null, 1, null);
objMan.RecordFixup(2, typeof(SamplesStructure).GetField("VarObject"), 3);
object objSampleClass1 = FormatterServices.GetUninitializedObject(typeof(SampleClass1));
object objSampleClass2 = FormatterServices.GetUninitializedObject(typeof(SampleClass2));
Console.WriteLine("VarInt={0},VarObject={1}", ((SamplesStructure)obj).VarInt, ((SamplesStructure)obj).VarObject == null ? "null" : "not null");
objMan.RegisterObject(objSampleClass1, 1, infoClass1);
objMan.RegisterObject(objSampleClass2, 3, infoClass2);
objMan.DoFixups();
// SampleClass1 mm = (SampleClass1)objSampleClass1;
//Console.WriteLine("sss"+((SampleClass2)(mm.ObjSampleClass1.VarObject)).VarInt);
Console.WriteLine("VarInt={0},VarObject={1}", ((SamplesStructure)obj).VarInt,
((SamplesStructure)obj).VarObject == null ? "null" : ((SampleClass2)(((SamplesStructure)obj).VarObject)).VarInt.ToString()
);
SampleClass1 root = (SampleClass1)objMan.GetObject(1);
Console.WriteLine("VarInt={0},VarObject={1}", root.ObjSampleClass1.VarInt, root.ObjSampleClass1.VarObject == null ? "null" : "not null");
Console.ReadKey();
}
}
[Serializable()]
public class SampleClass1 : ISerializable
{
public SamplesStructure ObjSampleClass1;
public SampleClass1(SerializationInfo info, StreamingContext context)
{
ObjSampleClass1 = (SamplesStructure)info.GetValue("objSampleClass1", typeof(SamplesStructure));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
//
}
}
[Serializable()]
public struct SamplesStructure
{
public int VarInt;
public object VarObject;
}
[Serializable()]
public class SampleClass2 : ISerializable
{
public int VarInt;
private SampleClass2(SerializationInfo info, StreamingContext context)
{
VarInt = info.GetInt32("VarInt");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
//
}
}
}