Ich benutze die XML-Serialisierung, bin aber jetzt auf einen Laufzeitfehler gestoßen, den ich noch nicht gesehen habe.
"Um serialisierbar zu sein, type Erben von IEnumerable müssen eine haben Implementierung von Add (System.Object) auf allen Ebenen ihrer Vererbung Hierarchie. ImageEditor.EffectOptions Implementiert Add (System.Object) "
nicht
Es scheint ein wenig seltsam zu sein, eine Methode über eine Laufzeitausnahme zu implementieren, anstatt einen Kompilierzeitfehler wie fehlende Methoden von implementierten Schnittstellen.
Ist das Absicht? Sollte dies nicht über eine Schnittstelle wie XmlSerializable
usw. erzwungen werden?
Abgesehen davon frage ich mich, ob der Serializer die Übergabe eines Wertes vom richtigen Typ garantiert, wo ich ihn einfach auf den Typ umwandeln kann, was in meinem Fall EffectOption
ist.
Oder sollte ich diese Add (object)
-Methode implementieren, um zu sehen, ob das Objekt vom Typ EffectOption
ist und wenn keine Ausnahme ausgelöst wird?
Ich habe diese Methode Add (object)
noch nicht implementiert, aber ich schätze, es ist sicherer, sie einfach auf EffectOption
zu übertragen und sie zu EffectOptions
collection hinzuzufügen.
EDIT: Hier ist der Typ selbst:
%Vor%Weil Unterklassen Interfacemethoden aufgrund der Basisklasse implizit implementieren, aber Xmlserializer Reflektionen verwendet, erhalten Sie den Fehler zur Laufzeit und nicht zur Kompilierzeit.
Versuchen Sie explizit zu implementieren und sehen Sie, was passiert. Ich habe dieses Problem vorher nicht gehabt, also bin ich mir nicht sicher, warum du es bist, außer du machst etwas Brauchbares.
Wenn Ihre Unterklassen die Schnittstelle explizit implementieren, aber keinen Implementierungscode ausführen (die implizite Implementierung von Methoden zulassen), entfernen Sie die Schnittstelle von Ihrer Untertypdeklaration, da sie aufgrund Ihres Basistyps immer noch gültig sein sollte. (jemand sagt mir, wenn ich hier bin)
Ich bin gerade auf dieses Problem gestoßen und habe es durch Hinzufügen einer Add-Methode gelöst:
%Vor%Ich hoffe, das hilft.
Tags und Links .net c# serialization exception ienumerable