2009-03-17 7 views
3

Ich habe ein POCO (einfaches altes clr-Objekt) in Sitzung gespeichert, und möchte in der Lage sein, Eigenschaften von diesem Objekt aus einem anderen Prozess (B) zu referenzieren. Ich möchte nicht, dass der Stand-Alone-Prozess (B) einen Verweis auf die DLL benötigt, in der die Klasse des Poco definiert ist. Ist es möglich, das gespeicherte Objekt (in der Sitzung) in etwas lesbares (z. B. xml) zu konvertieren, ohne auf die Klasse des Objekts zu verweisen?Deserialize-Session-Objekt ohne Typenreferenz?

+0

Was ist eine Sitzung hier und wie wird sie gespeichert? – user76035

+0

Eine asp.net-Sitzung, die den Statusserver verwendet. – Jeremy

Antwort

1

Sie müssten Ihren eigenen benutzerdefinierten Code erstellen, um das Objekt zu serialisieren und/oder zu deserialisieren.

Ohne einen Verweis auf die Assembly .NET verfügt nicht über die erforderlichen Metadaten, um die Arbeit für Sie auszuführen.

Sie können dem generierten XML einfach ein Attribut hinzufügen, um den Objekttyp anzugeben.

<Object Type="1"> 
    <Property1>Value</Property1> 
</Object> 

Natürlich müsste der Zielcode wissen, was mit diesem Typ-Attribut zu tun ist, aber Sie müssen nicht auf die tatsächliche .NET-Assembly verweisen.

1

Sie können nicht die Assembly, um die Metadaten des Objekts zu erhalten, vielleicht können Sie den Verweis auf die DLL vermeiden und Reflexion verwenden.

0

Wenn Sie nur eine Momentaufnahme des Objekts benötigen, dann können Sie es einfach serialisieren (oder nur die Eigenschaften, an denen Sie interessiert sind) und dann die serialisierten Daten an Prozess B übergeben. Die XmlSerializer-Klasse bietet wahrscheinlich die einfachste Möglichkeit, das Objekt zu serialisieren und dann zu verarbeiten B kann die Daten mit jedem Standard-XML-Parser lesen.

+0

Wie würden Sie den XmlSerializer verwenden, ohne eine Referenz zu haben und den Typ zu kennen? –

+0

Prozess B kann Standard-XML-Techniken verwenden, um das Objekt zu "deserialisieren". –

+0

@JDaniel: Einverstanden, sobald es in Xml ist. Ohne den Typ zu kennen, wie kann man ihn überhaupt serialisieren? –

0

Vergessen, wie es zu serialisieren - wie gehen Sie zu abrufen die Daten in einem anderen Prozess. Was ist dieser andere Prozess? Wenn es keine andere ASP.NET-Seite ist, hat es keinen Zugriff auf den Sitzungsstatus!

+0

Vielleicht war "Prozess" nicht die beste Wortwahl. Die DLLs werden in demselben Prozess (asp.net) ausgeführt. Die andere DLL (früher als B bezeichnet) wird von vielen Apps gemeinsam genutzt. Die Sitzungsvariable, die ich deserialisieren möchte, ist für eine App spezifisch. Ich versuche zu vermeiden, dass die geteilte DLL eine "einmalige" hat. – Jeremy

+0

Wie werden diese Daten von Assembly B verwendet, wenn sie in Web App A ausgeführt wird? Was macht Assembly B, wenn es in einer anderen Anwendung ausgeführt wird, und sind die anderen Anwendungen alle Webanwendungen? –