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
Integrare LLM alle nostre applicazioni in .NET con MCP
Ridurre il reflow cambiando il CSS
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Scrivere selettori CSS più semplici ed efficienti con :is()
Utilizzare Intersect e Except per filtrare set di dati in TSql
Configuratione e utilizzo .NET Aspire CLI
Ricerca delle GitHub issue tramite operatori logici
Evitare memory leaks nelle closure JavaScript
Integrare un servizio esterno con .NET Aspire
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Importare repository da Bitbucket a GitHub Enterprise Cloud
Utilizzare WhenEach per processare i risultati di una lista di task
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Sfruttare una CDN con i bundle di ASP.NET
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0


