2008-12-11 6 views
11

Klassen zu erzwingen Ich habe eine Schnittstelle, die einige Methoden definiert, die ich bestimmte Klassen implementieren möchte.Erzwingen serializable von einer Schnittstelle, ohne Klassen zu zwingen, in C#

Zusätzlich möchte ich alle Klassen, die diese Schnittstelle implementieren, serialisierbar sein. Wenn ich die Schnittstellendefinition ändern ISerializable wie unten zu implementieren ...:

 
public interface IMyInterface : ISerializable 
{ 
    MethodA; 
    MethodB; 
} 

... alle Klassen müssen nun explizit Serialisierung Maßnahmen umzusetzen, soweit ich weiß, da, wenn Sie ISerializable implementieren Sie das GetObjectData Mitglied implementieren müssen (und der notwendige Konstruktor zum Deserialisieren).

Wie kann ich darauf bestehen, dass Klassen, die meine Schnittstelle verwenden, serialisierbar sind, ohne sie dazu zu zwingen, die Serialisierung benutzerdefiniert zu implementieren?

Danke, Will

Antwort

0

Danke für die Antworten. Es wäre schön, in der Lage zu sein, von einer Schnittstelle abgeleitete Klassen zu erzwingen, um die Serialisierung ohne diese zu implementieren, und sie dann zur benutzerdefinierten Serialisierung zu zwingen, aber es scheint nicht möglich zu sein.

0

Sie könnten eine benutzerdefinierte FxCop Regel schreiben und validieren Check-In dagegen.

1

Wenn Sie die Standardserialisierung verwenden möchten, müssen Sie SerializableAttribute hinzufügen. Eine Alternative wäre die Verwendung einer abstrakten Klasse anstelle einer Schnittstelle und das Hinzufügen des SerializableAttribute zur abstrakten Klasse. Wenn Sie Ihre eigene benutzerdefinierte Serialisierung implementieren, möchten Sie ISerializable implementieren, andernfalls bleiben Sie bei SerializableAttribute.

10

Es scheint keinen Weg zu geben, dies zu tun, aber ich wünschte, es gäbe. obwohl

Hinweis zwei Dinge:

  • Das Serializable-Attribut kann nicht von einer Basisklasse, vererbt werden auch wenn die Basisklasse als abstrakt markiert ist.

  • Sie technisch nicht tun müssen, die Attribut Serializable, IF Sie sind ein XmlSerializer mit weil es keinen Gebrauch von Objektgraphen machen.

1

Schreiben Sie eine Klasse, die ISerializationSurrogate implementiert und dass Klassen zur Serialisierung verwenden, die nicht serialisierbar sind oder wo du bist der Serialisierung Implementierung nicht sicher.