2016-04-26 398 views
1

對象[] mList包含子集合想要的任何對象。 這應該是其他更多指定的對象集合的虛擬包裝類。ProtoBuf-Net:從父類繼承對象類型[]的[ProtoMember]

[ProtoInclude(98, typeof(Object1CollectionProto))] 
[ProtoInclude(99, typeof(Object2CollectionProto))] 
[ProtoInclude(100, typeof(Object3CollectionProto))] 
public class ObjectCollectionProto 
{ 
    protected ObjectType mCollectionType; 
    protected object[] mList; 
    public ObjectCollectionProto(){} 

    [ProtoMember(1), DefaultValue(ObjectType.Base)] 
    public ObjectType CollectionType //enumeration for type 
    { 
    get { return mCollectionType; } 
    set { mCollectionType = value;} 
    } 

    [ProtoMember(2)] 
    public object[] List 
    { 
    get { return mList; } 
    set { mList = value;} 
    } 
} 

然後,我們有一個上面的虛擬包裝的子類,它應該繼承它所需類型的對象[]。

[ProtoContract] 
public class Object1CollectionProto : ObjectCollectionProto 
{ 
    public Object1CollectionProto() 
    { 
    } 
} 

如何去指定的類層次結構,使Object1CollectionProto繼承的對象[] mList爲可序列化Object1的名單? Object1的可以在我的情況下已經序列化。只是不是他們的集合版本。

+1

'對象[]'只是不會工作。我想不出任何「好」的解決方法,但看着你的數據,我很困惑,爲什麼你不能只用'List 替換ObjectCollectionProto' ...... –

+0

我看到在另一篇文章,所以我會這樣做!謝謝Marc! – jStaff

回答

0

How to serialize arrays? 這是一個好辦法解決這個問題,只是翻拍的框架,以適應序列化陣列的這種方式。

還有一些仔細的想法,我做了一個序列化陣列正確的方式。在我的情況下,我從不實際上序列化父母類,而是我只序列化兒童

我從父類數組中刪除了ProtoMember屬性,並將子數組中的數組設置爲CHILDREN類中的特定類型。

public class BaseCollection{ 
    protected object[] mList; 
    /* 
    * this has a lot more properties/functions that declare how I prepare 
    * collections for serialization but are superfluous for the conversation, 
    * hence the reason for me wanting to know how to do this 
    */ 
} 

public class ChildCollection : BaseCollection{ 
    [ProtoMember(1)] 
    public Child[] childCollection 
    { 
    get { return mList as Child[]; } 
    set { mList = value; } 
    } 
}