2010-06-10 14 views
5

Ist es möglich, ein Stück xml, csv, json (was auch immer es ist) zu deserialisieren, und nicht wissen, es ist Typ? Aber gib ein Objekt zurück (was letztendlich der richtige Typ ist)?Kein Typ vor dem Deserialisieren

Antwort

2

Ja, es ist möglich.

Die serialisierten XML/CSV/JSON-Daten müssen Bezeichner enthalten, damit der Deserializer wissen kann, welche Arten von Objekten erstellt werden sollen, da dies vorher nicht bekannt sein kann. Damit der Deserializer neue Objektinstanzen erstellen kann, wird normalerweise das FactoryMethod-Entwurfsmuster verwendet.

Die Deserialisierung ist schwieriger als die Serialisierung.

1

Nicht auf eine einfache Art und Weise. Sie müssten Logik schreiben, um die Daten zu analysieren und zu entscheiden, welchem ​​Typ ihr Format am ähnlichsten ist.

1

Allgemein ja. Aber es hängt davon ab, welche Serialisierung Sie verwenden. Die serialisierten Daten müssen Metadaten über die Typen der serialisierten Objekte enthalten. Zum Beispiel unterstützt die XML-Serialisierung (System.Xml.Serialization) dieses Szenario nicht.

2

Es hängt von der Serialisierung ab.

Der BinarySerializer bettet Typinformationen in seinen Ausgabestream ein, also würde das, was Sie beschreiben, perfekt funktionieren. Sie erhalten ein Objekt, und Sie können sogar darüber nachdenken und es dann auf den richtigen Typ umwandeln.

XML-Serialisierung funktioniert nicht so, weshalb der XmlSerializer einen Typ in seinem Konstruktor fordert.

Am besten geht es Ihnen in einem Szenario, in dem die Daten einer begrenzten Anzahl von Typen angehören, die alle von einem Basistyp erben. Dann können Sie den Basistyp angeben (der mit den Attributen des bekannten Typs versehen ist, damit er alle anderen möglichen Typen kennt) und dann die Daten in den Standardbasistyp deserialisieren und dann untersuchen.

CSV und JSON sind noch schwieriger, da nicht viel Unterstützung für die Serialisierung in das Framework eingebaut wird.

Verwandte Themen