ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1497
1497
EMPFEHLEN
-
20.02.07 17:38 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
in .Net hat man die Möglichkeit über System.Runtime.Serialization.IObjectReference in Verbindung mit
System.Runtime.Serialization.SerializationInfo-> SetType(...) die (De)Serialisierung eines Types zu beinflussen.
Hat man beispielsweise ein Singleton (oder ein Objekt welches dieses Singleton Referenziert) Serialisiert dieses und Deserialisiert es anschließend wieder so hat man per default ZWEI unterschiedliche Instanzen dieses Singletons (da über interne Mechanismen der Serialisierung ein neue Singleton Instanz gebaut wird).
Da man aber bei der Deserialisierung eines Singletons gern eine Referenz auf das selbe Singleton haben will das gerade im aktuellen Kontext lebt, kann man dies über eine entsprechende Benutzerdefinierte Serialisierung erreichen.
Wie im folgenden Beispiel gezeigt:
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
using System; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace De.Tutorials.Training { public class CustomSerializationExample { public static void Main(string[] args) { Singleton singletonA = Singleton.Instance; Singleton singletonB = Singleton.Instance; Console.WriteLine(singletonA == singletonB); MemoryStream memoryStream = new MemoryStream(); BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(memoryStream, singletonB); memoryStream.Position = 0; Singleton singletonBB = (Singleton)binaryFormatter.Deserialize(memoryStream); Console.WriteLine((singletonBB == singletonB) && (singletonBB== singletonA)); } } [Serializable()] public class Singleton //: ISerializable { private static readonly Singleton instance = new Singleton(); public static Singleton Instance { get { return instance; } } //#region ISerializable Member //public void GetObjectData(SerializationInfo info, StreamingContext context) //{ // info.SetType(typeof(SingletonReference)); //} //#endregion } [Serializable()] public class SingletonReference : IObjectReference { #region IObjectReference Member public object GetRealObject(StreamingContext context) { return Singleton.Instance; } #endregion } }
Ausgabe:
...Code :1 2
True False
entfernt man die Kommentare bekommt man die gewünschte Ausgabe:
Code :1 2
True True
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hi Tom!
Finde ich sehr umständlich, sofern man mehrere Referenzen behalten will.
Es gibt auf TheCodeProject ein nettes Projekt. AltSerializer - An Alternate Binary Serializer
Dieser Serializer arbeitet schneller und viel effizienter als der Framework serializer und er speichert vor allem Referenzen automatisch.
Wenn man da noch ein explizites TypeCaching einbaut und den Serialisierprozess selber via ISerializable beeinflusst, kann man sogar die Versionierung völlig umschiffen!
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
21.02.07 10:23 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
Es ging in dem Beispiel einzig und allein darum die Möglichkeiten der Benutzerdefinierte Serialisierung der Standard .Net Serialisierung anhand des Sonderfalls der Behandlung eines Singletons bei der Serialisierung zu demonstrieren :PFinde ich sehr umständlich, sofern man mehrere Referenzen behalten will.
Es gibt auf TheCodeProject ein nettes Projekt. AltSerializer - An Alternate Binary Serializer
Dieser Serializer arbeitet schneller und viel effizienter als der Framework serializer und er speichert vor allem Referenzen automatisch.
Wenn man da noch ein explizites TypeCaching einbaut und den Serialisierprozess selber via ISerializable beeinflusst, kann man sogar die Versionierung völlig umschiffen!
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Bei meinem Post ging es einzig und allein darum, alternative und effizientere Techniken der benutzerdefinierten Serialisierung aufzuzeigen, bei der zudem alle Objektreferenzen beibehalten werden, ohne dabei einen Mehraufwand an Implementationen aufwenden zu müssen. :P
LG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
Ähnliche Themen
-
Client-Server am Beispiel einer Implementation eines Tic-Tac-Toe Netzwerkspieles
Von Fettsau im Forum Java GrundlagenAntworten: 7Letzter Beitrag: 24.02.10, 13:57 -
Eines Beispiel zum Remoting mit WCF über HTTP
Von Thomas Darimont im Forum .NET Web und KommunikationAntworten: 0Letzter Beitrag: 27.11.08, 11:47 -
Kleines Beispiel für die Verwendung eines java Beans in einer JSP
Von Thomas Darimont im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 27.08.08, 21:30 -
Beispiel eines ADT (verwirrt mich)
Von Razorhawk im Forum JavaAntworten: 1Letzter Beitrag: 01.02.06, 13:34 -
Frage zu Methodengestaltung am Beispiel eines Nachrichtenskripts
Von GuenniFD im Forum PHPAntworten: 2Letzter Beitrag: 13.09.05, 15:42






Zitieren
Login





