2016-04-26 1 views
1

L'objet [] mList contient tous les objets que la collection enfant souhaite afficher. Ceci est supposé être une classe wrapper factice pour le reste des collections d'objets plus spécifiées.ProtoBuf-Net: Hérite de [ProtoMember] de type object [] à partir d'une classe parent

[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;} 
    } 
} 

Ensuite, nous avons une classe d'enfant par exemple de l'emballage factice ci-dessus qui est censé hériter l'objet [] de celui-ci est le type désiré.

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

Comment puis-je aller sur la définition de la hiérarchie de classe afin que Object1CollectionProto hérite d'un objet [] MLIST comme une liste de ce Object1 qui peut être publié en feuilleton? Object1 peut être sérialisé dans mon cas déjà. Juste pas la version de collection d'entre eux.

+1

'object []' ne fonctionne tout simplement pas. Je ne peux pas penser à de "bonnes" façons de résoudre cela, mais en regardant vos données, je suis confus pourquoi vous ne pouvez pas simplement remplacer 'ObjectCollectionProto' avec' List '... –

+0

Je l'ai vu dans un autre poste, donc je le ferai de cette façon! Merci Marc! – jStaff

Répondre

0

How to serialize arrays? Ceci est une bonne façon de résoudre le problème , juste refaire le cadre pour s'adapter à cette façon de tableaux sérialisation.

Aussi avec une certaine réflexion, j'ai fait un moyen de sérialiser ce tableau correctement. Dans mon cas, je jamais sérialiser fait le PARENT classe, mais je ne sérialiser les ENFANTS.

J'ai supprimé l'attribut ProtoMember du tableau de classes parent et défini le tableau dans les enfants, avec un type spécifique dans les classes 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; } 
    } 
}