2016-11-14 4 views
0

Je suis en train de trouver un moyen de sérialisation et la désérialisation du ClassToSerialize ci-dessous construit comme:C sérialisation # personnalisé d'une classe avec la liste des interfaces

[Serializable] 
    public interface IFoo 
    { 
    } 

    [Serializable] 
    public class BaseFoo : IFoo 
    { 
    } 
    [Serializable] 
    public class Foo1 : BaseFoo 
    { 
     public string Foo1_Member1 { get; set; } 
     public int Foo1_Member2 { get; set; } 
    } 
    [Serializable] 
    public class Foo2 : BaseFoo 
    { 
     public IList<IFoo> Foo2_Member3 { get; set; } 
     public string Foo2_Member4 { get; set; } 
    } 
    [Serializable] 
    public class ClassToSerialize 
    { 
     public string Class_Member1; 
     public IFoo Foo; 
    } 

La classe sera transmise à une API et désérialisation les instances de Foo1 et Foo2 doivent être reconstruits et placés dans la propriété "Foo" et dans la chaine dans IList < IFoo> ou un objet similaire.

Je suis coincé avec ça depuis un jour ou deux et je n'ai plus d'idées!

+0

Pouvez-vous donner des exemples de choses que vous avez essayées? – axlj

+0

Quelle technique/bibliothèque utilisez-vous pour sérialiser vos classes? Je ne vois aucun des attributs habituels comme '[Serializable]' ou '[DataContract]'. Je sais que DataContractSerializer a KnownTypes pour gérer ce problème, mais cela ne vous sera pas très utile si vous n'utilisez pas DataContractSerializer. –

+0

J'ai tout essayé depuis l'implémentation d'attributs XML jusqu'à une implémentation personnalisée de 'ISerializable'. Cependant, je cherche à obtenir une direction validée sur laquelle concentrer mes efforts. –

Répondre

0

Pour d'autres personnes qui essaient de faire accomplir quelque chose de semblable: J'ai fini par mettre en œuvre ISerializable sur BaseFoo, Foo1, Foo2 et ClassToSerialize.

J'ai ajouté un champ FooType Type à l'interface et l'ai implémenté sur la classe de base.

Dans la mise en œuvre, je désérialise d'abord à BaseFoo et puis, je désérialise à nouveau en fonction du type soit à Foo1 ou Foo2.

J'aimerais entendre une meilleure approche.