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
Utilizzare Container Queries nominali
Testare il failover sulle region in Azure Storage
Utilizzare Containers in .NET Aspire
Gestire gli errori nelle Promise JavaScript con try()
Esporre un server MCP esistente con Azure API Management
Generare una User Delegation SAS in .NET per Azure Blob Storage
Le cron expression di un workflow di GitHub
Creare comandi nella dashboard .NET Aspire
Utilizzare Intersect e Except per filtrare set di dati in TSql
Gestire pubblicazione Kubernetes tramite .NET Aspire
Controllare la velocità di spostamento su una pagina HTML
Raggruppare risorse in .NET Aspire
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Gli oggetti CallOut di Expression Blend 4.0
- Sfruttare una CDN con i bundle di ASP.NET
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Inserire le news di Punto Informatico nel proprio sito


