2016-11-14 1 views
0

Ich versuche, einen Weg zu finden, die ClassToSerialize zu serialisiert und deserialisiert unten gebaut wie:C# benutzerdefinierte Serialisierung einer Klasse mit Liste der Schnittstellen

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

Die Klasse wird die Instanzen an einem API und auf der Deserialisierung weitergegeben von Foo1 und Foo2 müssen rekonstruiert und in die Eigenschaft "Foo" und die Kette in IList < IFoo> oder ein ähnliches Objekt platziert werden.

Ich bin mit diesem für einen Tag oder so stecken geblieben und ich habe keine Ideen mehr!

+0

Können Sie Beispiele für Dinge nennen, die Sie ausprobiert haben? – axlj

+0

Welche Technik/Bibliothek verwenden Sie, um Ihre Klassen zu serialisieren? Ich sehe keine der üblichen Attribute wie '[Serializable]' oder '[DataContract]'. Ich weiß, dass DataContractSerializer über KnownTypes verfügt, um mit diesem Problem umzugehen, aber das bringt Ihnen nicht viel, wenn Sie DataContractSerializer nicht verwenden. –

+0

Ich habe alles versucht, XML-Attribute zu einer benutzerdefinierten Implementierung von 'ISerializable' zu ​​implementieren. Ich suche jedoch eine validierte Richtung, auf die ich mich konzentrieren kann. –

Antwort

0

Für andere Menschen, die versuchen, etwas zu tun erreichen ähnlich: Ich habe Umsetzung endete ISerializable auf BaseFoo, Foo1, Foo2 und ClassToSerialize.

Ich habe der Schnittstelle ein FooType Type Feld hinzugefügt und es in der Basisklasse implementiert.

In der Implementierung deserialisiere ich zuerst zu BaseFoo und dann entserialiere ich wieder basierend auf entweder Foo1 oder Foo2.

Ich würde gerne einen besseren Ansatz hören.

Verwandte Themen