2017-06-14 1 views
0

Ich habe MessagePackKnownCollectionItemTypeAttribute mit z.MessagePack mit verschachtelten Dictionary und Polymorphismus

[MessagePackKnownCollectionItemTypeAttribute("MyAbstractBase", typeof(MyImpl))] Dictionary<int, MyAbstractBase> class_member;

dieser große gearbeitet hat, aber wie wäre es, wenn ich:

[MessagePackKnownCollectionItemTypeAttribute("MyAbstractBase", typeof(MyImpl))] Dictionary<int, Dictionary<int, MyAbstractBase>> class_member;

Die oben wird nicht funktionieren, erhalte ich „Diese Operation wird nicht unterstützt, weil‚MyAbstractBase‘kann nicht instanziiert sein. " (zur Laufzeit, wenn ich einen Serialisierer instanziiere). Ich versuchte auch [MessagePackKnownCollectionItemTypeAttribute("MyAbstractBase", typeof(Dictionary<int, MyImpl>))] Dictionary<int, Dictionary<int, MyAbstractBase>> class_member;

Das gab den gleichen Fehler.

Gibt es eine Möglichkeit, abstrakte Klassen in solchen verschachtelten Wörterbüchern zu behandeln? Danke!

Antwort

0

Für was es wert ist, landete ich eine Zwischenklasse mit bis:

public class MyIntermediaryDict 
{ 
    [MessagePackKnownCollectionItemTypeAttribute("MyAbstractBase", typeof(MyImpl))] 
    public Dictionary<int, MyAbstractBase> intermediary_dict; 

};

class MySerializableClass 
{ 
    public Dictionary<int, MyIntermediaryDict> myDict; 
}