2011-04-16 48 views
1

我有这三种类型的,例如:C#反序列化订单

public class Type1 : ISerializable 
{ 
    public List<Type2> field2 { set; get; } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("field2", field2, typeof (List<Type2>)); 
    } 

    protected Type1(SerializationInfo info, StreamingContext context) 
    { 
     this.field2 = (List<Type2>) info.GetValue("field2", typeof (List<Type2>)); 
    } 
} 

public class Type2 : ISerializable 
{ 
    public List<Type3> field3 { set; get; } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("field3", field3, typeof (List<Type3>)); 
    } 

    protected Type2(SerializationInfo info, StreamingContext context) 
    { 
     this.field3 = (List<Type3>) info.GetValue("field3", typeof (Type3)); 
    } 
} 

public class Type3 : ISerializable 
{ 
    public string field; 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("field", field, typeof (string)); 
    } 

    protected Type3(SerializationInfo info, StreamingContext context) 
    { 
     this.field = (string) info.GetValue("field", typeof (string)); 
    } 
} 

在一个第一类型对象的反序列化时间,例如在第一一个TYPE3对象被反序列化,然后 TYPE1被desrialized然后类型2。我需要这门学科: 起初TYPE1 desrialize,然后键入2,然后键入3 我该怎么办呢? 脚注:这不是我的代码,我不测试,但我的代码是这样的。由于其体积的我不锅在我的帖子...

+0

为什么反序列化的事情的顺序? – taylonr 2011-04-16 15:13:46

+0

由于恢复一些亲子关系... – qiback 2011-04-16 15:15:15

回答

0

这听起来就好像你需要创建一个整体的序列化的类,其中要求你控制顺序的序列化,像这样:

public class TypePrimary : ISerializable{ 
    private Type1 _type1; 
    private Type2 _type2; 
    private Type3 _type3; 
    protected TypePrimary(Type1 type1, Type2, type2, Type3 type3){ 
     this._type1 = type1; 
     this._type2 = type2; 
     this._type3 = type3; 
    } 
    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("type1", this._type1, typeof (Type1)); 
     info.AddValue("type2", this._type2, typeof (Type2)); 
     info.AddValue("type3", this._type3, typeof (Type3)); 
    } 

    protected TypePrimary(SerializationInfo info, StreamingContext context) 
    { 
     this._type1 = (Type1) info.GetValue("type1", typeof (Type1)); 
     this._type2 = (Type2) info.GetValue("type2", typeof (Type2)); 
     this._type3 = (Type3) info.GetValue("type3", typeof (Type3)); 
    } 
    // Use public getters to return the types... 
} 

领域的其余部分将被序列化也......觉得周围这样的包装,以保持所要求的一致性..