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?
Antwort
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.
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.
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.
Wie würden Sie den XmlSerializer verwenden, ohne eine Referenz zu haben und den Typ zu kennen? –
Prozess B kann Standard-XML-Techniken verwenden, um das Objekt zu "deserialisieren". –
@JDaniel: Einverstanden, sobald es in Xml ist. Ohne den Typ zu kennen, wie kann man ihn überhaupt serialisieren? –
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!
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
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? –
- 1. ohne
- 2. ohne
- 3. ohne
- 4. Abfrage automatisch ohne Datensätze ohne Einträge
- 5. Javascript RegexMuster ohne Geld Werte ohne Währungs
- 6. Schöne URLs ohne mod_rewrite, ohne .htaccess
- 7. wie ohne Combobox Hintergrund ohne PresentationFramework.Aero2
- 8. ohne Sortierung
- 9. ohne Beziehung
- 10. ohne Bereiche
- 11. Funktionsdefinition ohne {}
- 12. ohne Repository
- 13. Konsumieren von JSON-Daten ohne jQuery (ohne getJSON)
- 14. xpath finde Knoten ohne Klasse und ohne ID
- 15. Requirejs Ausgabe in eine einzige Datei ohne jQuery ohne Abhängigkeit?
- 16. Warum kann eine URL (http: //) ohne Kommentar ohne Fehler kompilieren?
- 17. phpmailer sendet Mail ohne Betreff und ohne Zeilenumbrüche
- 18. ng-repeat ohne HTML-Element (diesmal wirklich ohne)
- 19. Verwenden von Git mit diffmerge ohne Eingabeaufforderungen und ohne Alias
- 20. Suche ohne Groß- und Kleinschreibung ohne zusätzliche Regeln?
- 21. Schienenansicht ohne Controller
- 22. serialisieren ohne ein Formular?
- 23. Jquery Validierung ohne Formularübergabe
- 24. TABELLE ohne vertikale Zellgrenzen
- 25. javadoc Parameter ohne Paketnamen
- 26. Paypal - Zahlung ohne Konto
- 27. ASP.net-Schaltfläche ohne Senden
- 28. grep ohne String
- 29. SSAS-Versionierung ohne Quellcodeverwaltung
- 30. ActiveRecord: Finden ohne Verknüpfungen
Was ist eine Sitzung hier und wie wird sie gespeichert? – user76035
Eine asp.net-Sitzung, die den Statusserver verwendet. – Jeremy