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 il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Creare una custom property in GitHub
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Gestione degli eventi nei Web component HTML
Creare un webhook in Azure DevOps
Creare agenti facilmente con Azure AI Agent Service
Potenziare la ricerca su Cosmos DB con Full Text Search
Loggare le query più lente con Entity Framework
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Path addizionali per gli asset in ASP.NET Core MVC
Eseguire script pre e post esecuzione di un workflow di GitHub
Utilizzare il nuovo modello GPT-4o con Azure OpenAI