Nello script #89 si è visto una tipica problematica che si affronta quando si usa WCF o in generale il DataContractSerializer. Il motore infatti necessita di conoscere quali sono i tipi serializzabili e quali può trovarsi di fronte nel caso in cui il tipo da serializzare sia astratto o ereditato da altri tipi.
Mediante l'attributo KnowType si risolve il problema e si istruisce il motore dei tipi conosciuti. Non sempre però questo è possibile, soprattutto in situazioni di modularità dove i tipi vengono risolti a runtime o sono pluggabili, perciò non conosciuti in partenza.
Per risolvere questo problema, il medesimo attributo permette di indicare il nome del metodo statico, definito sulla classe stessa, che permette di risolvere a runtime i tipi conosciuti. Questo metodo deve obbligatoriamente restituire un array di Type, ma la sua implementazione dipende dalle logiche dell'applicazione.
Nell'esempio seguente si caricano i tipi dell'assembly che li contiene.
[KnownType("GetKnownType")]
public abstract class PostBase
{
private static Type[] GetKnownType()
{
if (knownTypes == null)
knownTypes = typeof(PostBase).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(PostBase))).ToArray();
return knownTypes;
}
E' opportuno, poiché chiamato numerose volte, effettuare cache della lista così da velocizzare il processo di serializzazione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Importare repository da Bitbucket a GitHub Enterprise Cloud
Blazor e InputHidden in .NET 10
Nuove validazioni Form Blazor
Utilizzare AbortController per cancellare operazioni asincrone in JavaScript
Keynote Global Azure 2026 - ASPItalia.com
Creare un extension method per applicare condizionalmente una Where in una query LINQ per Entity Framework
Recuperare gli audit log in Azure DevOps
Ottimizzare gli indici con Automatic Index Compaction in Azure SQL Database
Interazione con ReconnectModal in Blazor
Come automatizzare il download dei report di billing da GitHub Enterprise
Utilizzare zizmor per rendere più sicuri i workflow di GitHub


