c# 序列化帮助ObjectManager

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)
        {
            //
        }
    }
}

 

posted on 2012-12-14 21:27  R.Ray  阅读(318)  评论(0)    收藏  举报

导航