.NET, C#: Wie Sie zum hinzufügen einer benutzerdefinierten Serialisierung Attribut, das als ISerializable-Schnittstelle
Ich bin dabei einige Serialisierung von db linq-Objekte, die enthalten EntitySet und EntityRef Klassen.
Fand ich ein ziemlich einfacher Weg, um mit der Serialisierung von diesen Klassen, indem Sie einfach mit ISerializable richtig zu handhaben, Mitglieder dieser Typ (Umwandlung in Listen für die Serialisierung, und macht es auf der Deserialisierung).
Jedoch, es wäre wirklich schön, wenn ich könnte:
[Serializable]
[SerializeLinqEntities]
partial class Person
{ ... }
Statt:
partial class Person : ISerializable
{
public virtual void GetObjectData( SerializationInfo si, StreamingContext ctxt )
{
EntitySerializer.Serialize(this, typeof(Person), si, ctxt);
}
protected Person( SerializationInfo si, StreamingContext ctxt )
{
EntitySerializer.Deerialize(this, typeof(Person), si, ctxt);
}
}
Gibt es eine Möglichkeit, dies zu tun? Ich sah durch die Serialisierung von Klassen und konnte nicht scheinen zu finden, jeder Weg, um das setup benutzerdefinierte Serialisierung filter-Routinen (wo könnte ich suchen für meine custom-Attribut).
Dank!
- Sieht aus wie IClientFormatterSinkProvider und IServerFormatterSinkProvider wird mir erlauben, um eine BinaryFormatter mit meinem custom SurrogateSelector gesetzt. Nochmals vielen Dank Sergey!
- Hmm... so, wie es sich herausstellt, hat Microsoft gemacht dies viel schwieriger als es aussieht. Finden Sie unter den folgenden link: 123aspx.com/Rotor/RotorSrc.aspx?rot=40027 Spüle-Anbieter, wie es sich herausstellt, sind ziemlich Komplex, und es ist nicht so einfach, wie einfach die Umsetzung ein. Ich wünschte wirklich, Sie würden besser gestellt-Schnittstelle API ist die Schnittstelle mit der binären Serialisierung...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können dies tun, durch die Implementierung ISerializationSurrogate und ISurrogateSelector Schnittstellen.
Etwas wie dieses:
ISerializationSurrogate
da die Frage explizit genannten Attribute. Das einzige problem mit dieser Lösung kommt, wenn Sie nicht haben Zugriff auf das Formatierungsprogramm Instanz zu setzen, dieSurrogateSelector
Eigenschaft.Leider Nein,
ISerializable
ist eine Schnittstelle, die entworfen, um Ihnen zu erlauben, zur Steuerung der Serialisierung Prozess während derSerializableAttribute
ist nur eine Markierung, die sagt, dass diese Klasse serialisiert werden kann". Allerdings kann man sich in so etwas wie PostSharp, um diese Funktionalität hinzuzufügen (nehmen Sie einen Blick auf dieCompositionAspect
).