2012-06-28 4 views
5

RavenDB può serializzare tutte le proprietà pubbliche, private e protette su qualsiasi dato oggetto C#, anche senza attributi di serializzazione.Come leggere e impostare campi privati ​​senza un calo delle prestazioni in C#?

So che questo può essere fatto con la riflessione, ma questo avrebbe alcuni problemi di prestazioni. Ci sono altri modi più efficienti per raggiungere questo obiettivo?

Per utilizzare la serializzazione integrata in .NET sono necessarie annotazioni o l'implementazione di alcune interfacce di serializzazione, mentre RavenDB può serializzare qualsiasi oggetto specificato da e verso JSON.

Sono più interessato alla tecnologia che utilizza e non a RavenDB in particolare.

+11

No. Non farlo. Sono privati ​​per una ragione. – Oded

+1

Qual è l'obiettivo che stai cercando di raggiungere? Quelle variabili sono private per una ragione; perché stai cercando di rompere il design? – ean5533

+0

Sono interessato a come ciò potrebbe essere fatto, per capire come funzionano RavenDB e altre soluzioni. – Olsenius

risposta

1

Se l'impostazione delle proprietà tramite riflessione è troppo lenta, è possibile generare metodi dinamici che li impostano in fase di esecuzione. Questo può essere fatto usando Relection.Emit o creando una compilazione e Expression<T>.

0

Guarda a NHibernate per l'ispirazione - oltre ad altre alternative ti dà anche l'opportunità di esprimere quali proprietà persisteranno usando le interfacce. Sotto gli oggetti wrapper del cofano che implementano le interfacce cambia la gestione.

Vedere ad esempio NHibernate Reflection Optimizer - what does it do?

Problemi correlati