Nello script #492 abbiamo visto come creare un clone di un oggetto utilizzando la libreria JSON.NET. In questo script vedremo come effettuare la stessa operazione sfruttando le classi native presenti sia nel .NET Framework che nel .NET Core: MemoryStream e BinaryFormatter. BinaryFormatter si occupa di deserializzare l'oggetto nel MemoryStream e di serializzarlo successivamente in un nuovo oggetto. MemoryStream è uno storage temporaneo per la classe deserializzata.
Per poter sfruttare questa tecnica l'unica accortezza da avere è quella di marcare la classe da clonare con l'attributo Serializable. Se la classe a sua volta contiene membri il cu tipo è un'alatra classe, anche questa deve essere marcata con l'attributo Serializable. Inoltre, dobbiamo tener presente che questa tecnica non serializza le proprietà, ma i campi che rappresentano il vero stato di una classe.
Vediamo ora il codice.
public static T Clone<T>(this T source)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("Parameter is not serializable", "source");
}
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}Il primo blocco verifica che l'oggetto sia serializzabile (cioè marcato con l'attributo Serializable) e in casi negativo lancia un'eccezione. Successivamente istanziamo il BinaryFormatter e il MemoryStream all'interno del quale serializziamo l'oggetto da clonare col metodo Serialize di BinaryFormatter.
Successivamente, riportiamo il cursore dello stream all'inizio col metodo Seek e infine deserializziamo lo stream in un nuovo oggetto col metodo Deserialize del formatter.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire i pre-commit hook di git con dependabot
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Creare comandi nella dashboard .NET Aspire
Supporto nativo a JSON in SQL Server 2025
Effettuare un clone parziale di un repository di GitHub
Usare il metodo nameof con un tipo generico in C# 14
Mischiare codice server side e client side in una query LINQ con Entity Framework
Gestire codice JavaScript con code splitting e lazy loading
Ottimizzare la content-visibility in CSS specificando lo spazio da occupato dall'area non renderizzata
Effettuare la ricerca di testo nascosto in una pagina web con Javascript
Utilizzare noopener e noreferrer nei link HTML
Centralizzare gli endpoint AI Foundry con Azure API Management
I più letti di oggi
- Costruire servizi basati su XML: SOAP
- Usare le transazioni in applicazioni ASP 1/2
- Security in ASP.NET MVC 5 con ASP.NET Identity 2
- Le novità di ASP.NET 4.0: dall'estendibilità ad ASP.NET AJAX e MVC 2
- Un primo sguardo a Microsoft Velocity
- Gli application pool di IIS 6
- Global Azure 2026 - ASPItalia.com - Milano
- Introduzione al framework Javascript jQuery con esempi pratici di utilizzo
- Future Dev Day - Milano
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js




