Um mehr Kontrolle über die Serialisierung zu bekommen, habe ich eine Klasse von [DataContract] in [Serializable] konvertiert, indem ich sowohl GetObjectData als auch den speziellen Deserialisierungskonstruktor implementiert habe. Wenn ich das tue, hat das ausgesendete XML jetzt Typinformation, die auf alle Elemente angewendet wird. Ich möchte diese überflüssige Information nicht, und ich frage mich, wie man den Serializer informiert, um es nicht auszugeben.
Hier ist der Beispielcode, der [DataContract] verwendet:
%Vor%Dies gibt das folgende XML aus (notice no type info auf Nullable Number und Number - dies ist die gewünschte Ausgabe):
%Vor%Wenn ich den obigen Code wie folgt modifiziere (Hinzufügen von [Serializable],: ISerializable, und die zwei Serialisierungsmethoden):
%Vor%Es gibt jetzt das folgende XML aus. Beachten Sie, dass die Typinformationen (i: type="x: int") zu jedem Element hinzugefügt werden.
%Vor%Warum macht es das? Wie verhindere ich das?
Danke!
Brauchst du ISerializable
hier? Was hat dir das normale DataContractSerializer
nicht gegeben? Wenn Sie zurückschalten, sollte es gut funktionieren.
Durch die Implementierung der benutzerdefinierten Serialisierung sind die Daten nicht mehr vertragsbasiert - daher muss diese zusätzlichen Informationen enthalten, um zu gewährleisten, dass sie später verstanden werden können.
Also: Gibt es einen Grund, in diesem Fall ISerializable
zu implementieren?
Tags und Links .net c# xml datacontractserializer serializable