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 dell'annidamento delle regole dei layer in CSS
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Generare un hash con SHA-3 in .NET
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Come migrare da una form non tipizzata a una form tipizzata in Angular
Migrare una service connection a workload identity federation in Azure DevOps
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Evitare la script injection nelle GitHub Actions
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Creare gruppi di client per Event Grid MQTT