Versatile Serialization ermöglicht es Entwicklern, sich auf spezifische Datenformate einzustellen, und dies durch Deklaration von Attributen anstatt durch Programmierung.
Haben Sie schon einmal so etwas implementiert?
..oder so etwas?
..oder das hier?
Verwenden Sie den deklarativen Ansatz!
Versatile Serialization definiert ein Klassenmodell mit Attributen, die eigenen Klasse und Klassenmitgliedern, welche am (De-)Serialisierungsprozess teilhaben, zugeordnet werden können. Diese Attribute tragen Formatierungs-Instruktionen und Einstellungen, die eine präzise Steuerung über die Art der Formatierung und Interpretation während der Serialisierung bzw. der Deserialisierung ermöglichen. Die eigentliche Verarbeitung steht unter der Kontrolle der VSFactory Klasse, der quasi die Rolle der Exekutive zufällt und ein wichtiger Baustein der Bibliothek ist.
Versatile Serialization ist insbesondere nützlich, wenn Sie Kommunikations- oder Daten-Import/Export Funktionalitäten in Microsoft .NET Applikationen implementieren, so wie zum Beispiel wenn Rohdaten-Formate generiert oder gelesen werden für:
- Punk-zu-Punk Kommunikation
- Dateibasierter Datenaustausch
- Interprozess Kommunikation
- Persistenz
- In allen Fällen in denen Standard-Serialisierungsverfahren wegen spezifischer Formatanforderungen nicht verwendet werden können.
Außerdem bietet Versatile Serialization folgende Vorteile:
- Reduzierter Implementierungsaufwand bei der Entwicklung solcher Datenaustauschvorgänge.
- Verbesserung der Wartbarbeit und Transparenz solcher Anwendungen.
- Für den Datenaustausch mit anderen Anwendungen ist nur ein Minumum an eigener Codierung erforderlich.
- Änderungen und Erweiterungen an den Datenaustausch-Formaten können schnell und einfach vorgenommen werden.
Features
Hier die wichtigsten Merkmale die zeigen, in welcher Weise unser Produkt die Flexibilität der Serialisierungs- und Deserialisierungsausgaben erhöht:
- Built-in support für alle primitive Datentypen.
- Anwendbar für Klassen und Strukturen.
- Unterstützt Chars, Enums, Strings, DateTime, TimeSpan und Guid.
- Unterstützt nullbare Typen.
- Unterschiedliche Attribute steuern auf Feld-Ebene die Serialisierung in binäres oder in Textformat.
- Verschiedenste Attribut-Parameter ermöglichen ein Feintuning der Formatspezifikation, z.B. Definition fester Längen, Ausrichtungen, Füllstellen, Cultures, Encodings (um nur einige zu nennen).
- Auf der sogenannten Container-Ebene (d.h. der umschließenden Klasse oder Struktur) können Definitionen wie Daten-Header und -Trailer, Separatoren, Quotierungs- und Escapesequenzen u.a. gesetzt werden.
- Deklarierte Zähler, d.h. Felder die automatisch (während der Serialisierung) mit einem Wert versorgt werden, der eine Quantität in den "benachbarten" Feldern anzeigt, z.B. die Byte- oder Zeichenanzahl in Folgefeldern oder die Anzahl der Elemente in Listen oder Arrays. Während der Deserialisierung werden Zähler automatisch ausgewertet, um die Zuordnung von Daten in Felder korrekt zu steuern.
- Unterstützung sogenanntner Sub-Container, d.h. die Möglichkeit der Einbettung serialisierbarer Container (Klassen, Strukturen) in andere.
- Vererbung serialisierbarer Container; erlaubt die Abbildung von Untervarianten in Form verschiedener Sub-Klassen im Byte-Stream.
- Arrays und Listen aller unterstützter Typen (inkl. Sub-Container).
- Eingebaute Diagnosefunktionen können bei Bedarf zur Laufzeit für die Fehleranalyse aktiviert werden.
- Customizing des (De-) Serialisierungsprozesses auf Feld-Ebene. Zum Beispiel können Checksummenberechnungen und -prüfungen auf diese Weise einfach hinzugefügt werden.
- Deklarieren optionaler Elemente.
- Behandlung von Fließkommawerten als Integers per Deklaration.
- Little-Endian oder Big-Endian Codierung.
- Deklarative Übersetzung von Enum-Werten in (oder aus) Byte-Sequenzen, Zahlen oder Strings.
- Spezifikation von Kandidaten-Klassen für die Deserialisierung, wenn eine von mehreren möglichen Klassen in Abhängigkeit von den Daten gewählt werden soll.
- (De-) Serialisierung umfangreicher Streams als Listen von Objekten verschiedener Kandidatentypen.
- Kandidatenauswahl per Deklaration oder optional codiert per Customizing.
- Verschachtelte Datenstrukturen.
- Customizing (de-) serialisierbarer Typen.
- Deklarieren von Escape-Regeln.
- Lesen und Schreiben von Streams und Byte Arrays.
- 100% C#, Fully managed, kein Unsafe Code