Chiedersi se qualcuno sa in modo definitivo quale sia la serializzazione predefinita utilizzata da ASP.net HttpRuntime.Cache? È binario, XML, qualcos'altro?Qual è la serializzazione predefinita utilizzata da ASP.net HttpRuntime.Cache
Chiedo perché ho una situazione in cui sto compilando un Elenco generico con più oggetti dello stesso tipo personalizzato. Il tipo personalizzato è un POCO, non c'è niente di speciale. Tutte le sue proprietà sono pubbliche con {get; impostato; }, è pubblico, non ha ereditarietà, non ha interfacce. In effetti è molto meno complicato di molti altri oggetti che stiamo memorizzando nella cache e che funzionano senza problemi. Ho provato ad aggiungere l'attributo [Serializable] alla classe personalizzata e non ha alcun effetto.
Aggiungo l'elenco alla cache con una chiave univoca. L'elenco è stato verificato come popolato prima di essere inserito nella cache, anche gli oggetti nell'elenco sono stati verificati come popolati. Ma quando la lista viene estratta dalla cache è una lista vuota (NOT NULL), semplicemente non contiene elementi. Ciò significa che l'elenco viene aggiunto alla cache ed è recuperabile, ma per qualche motivo la cache ha problemi con la serializzazione degli oggetti nell'elenco.
Ho appena trovato questo strano strano perché ho un altro elenco di oggetti personalizzati che sono molto più complicati (costituiti da ereditarietà, interfacce e contenenti anche proprietà che sono elenchi generici di altri oggetti complessi) e la memorizzazione nella cache di tali elenchi funziona senza problemi.
Sia l'elenco di lavoro che quello non funzionante vengono gestiti in classi C# al di fuori dei controlli utente ASP.net che consumano i dati memorizzati nella cache. Entrambe queste classi di gestione della cache chiamano esattamente la stessa istanza di singleton della classe Cache Manager che avvolge HttpRuntime.Cache per fornire metodi tipizzati per l'estrazione e la spinta di oggetti nella cache.
Chiunque ha qualche idea su cosa potrebbe causare ciò. L'unica cosa che posso attenuare è che la proprietà 'Blurb' dell'oggetto Document può potenzialmente contenere HTML, ma se ASP.net utilizza la serializzazione binaria per la cache, non vedo come questo possa fare qualsiasi cosa.
Ecco la classe
public class Document
{
public string ContentTypeId { get; set; }
public string ContentId { get; set; }
public bool IsCustom { get; set; }
public Language DocLanguage { get; set; }
public string RegularTitle { get; set; }
public string InvertedTitle { get; set; }
public string Blurb { get; set; }
}
Ecco la sottoclasse utilizzato nella proprietà Language
public class Language
{
public string Name { get; set; }
public string Code { get; set; }
}
+1 Buona domanda! –