2016-05-11 3 views
0

System.InvalidOperationException: { "Es war nicht möglich, einen Serializer für die Vorbereitung: Someobject Innere Ausnahme : {"Kein Serializer für Typ definiert: System.Object"}Protobuf Netz nicht gesagt, ein System.Object zu serialisiert, aber immer noch Fehler: Keine Serializer für Typen definiert: System.Object

Könnte ich Fehler von etwas anderem in meinem Code bekommen? Ich habe eine Tonne von Klassen, die ich versuchen zu serialisieren, aber ich teste die einfacheren zuerst um sicherzustellen, dass mein Programm allgemein funktioniert


auch sehr wichtig: Someobject wird von anderen Klassen geerbt (ich bin gerade Serialisierung dieser Basisklasse, wenn ich den Fehler allerdings erhalten)


[ProtoContract] 
[ProtoInclude(10, typeof(AnotherObject))] 
[ProtoInclude(11, typeof(YetAgainObject))] 
public class SomeObject { 
    [ProtoMember(1)] 
    String mName = ""; 
    [ProtoMember(2)] 
    String mOwner = ""; 
    [ProtoMember(3)] 
    String mDesc = ""; 
} 

[ProtoContract] 
public class AnotherObject : SomeObject{ 
    [ProtoMember(1)] 
    public object[] someList{ get; set: } 
} 

....

+0

Sie haben gesagt, dass Ihr 'VObjectType' korrekt eingerichtet ist. Hast du versucht es alleine zu serialisieren? –

+0

Ja, es serialisiert aber den Fehler. Ich habe es herausgefunden. Ich werde die Frage bearbeiten und meine Antwort posten, damit es Sinn macht. – jStaff

+0

@Arthur Rey Ich habe meine Bearbeitung beendet, es ist viel besser formuliert und ich habe sie unten beantwortet. Es gibt einfach keine "Stack-Trace" für Protobuf-Net-Vererbungshierarchien, so dass es den Fehler auf die Klasse wirft, die gerade serialisiert wird, selbst wenn es ein Elternteil ist. – jStaff

Antwort

0

Im Prozess der Serialisierung des ursprünglichen Objekts überprüft es, ob alle ProtoInclude Aussagen. Außerdem prüft es auf korrekte Serialisierungsstrukturen und -qualitäten! Wenn es einen Fehler in einer von denen gibt, wird es einen Fehler in dem, den Sie versuchen zu serialisieren, aber es wird Ihnen nicht sagen, von dem es ist eher sagen, dass die Klasse, die Sie geerbt haben, den Fehler verursacht.

So Vorsicht benötigt wird, wenn ohne einzeln überprüft sie große Mengen von Klassen zu tun. Dies gilt auch für andere Fehler als ein Objekt, das nicht für die Serialisierung definiert ist.

So war mein Fehler in another und das Update für das heißt konkret:

[ProtoContract] 
public class AnotherObject : SomeObject{ 
    [ProtoMember(1, DynamicType = true)] 
    public object[] someList{ get; set: } 
} 

Weil Sie ihm sagen müssen, dass das Objekt etwas enthält, die serialisierbar ist (und es werden Ihnen vertrauen).

Verwandte Themen