Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Copia di oggetti .NET nelle Portable libraries

Come sapete, in .NET esistono i concetti di shallow copy e deep copy per la copia di oggetti. In molti casi, non quando si espongono API pubbliche, si può implementare l'interfaccia ICloneable per rendere un reference type "copiabile".

Tuttavia ICloneable non è disponibile in tutte le piattaforme, quindi non è ad esempio utilizzabile nelle Portable Class Libraries. Le tecniche di copia sono tante, ma una semplice può essere posta in atto ricorrendo alla serializzazione JSON.

Quindi installiamo l'ultima versione del pacchetto NewtonSoft.Json da NuGet e, in una classe statica (o modulo in VB), scriviamo questo metodo extension generico:

Visual Basic

Public Module Extensions
    <ExtensionPublic Function Clone(Of T)(source As TAs T
        If (Object.ReferenceEquals(source, Nothing)) Then Return Nothing

        Return JsonConvert.DeserializeObject(Of T)(JsonConvert.SerializeObject(source))
    End Function
End Module

C#

public static T Clone<T>(this T source)
{
    if (Object.ReferenceEquals(source, null))
    {
        return default(T);
    }

    // In the PCL we do not have the BinaryFormatter
    return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source));
}

Che useremo semplicemente in questo modo:

Visual Basic

Dim copia = myObj.Clone()

C#

var copia = myObj.Clone();

Cosa fa il codice? serializza e contestualmente deserializza l'oggetto di origine, creandone una nuova istanza; coi generics, si può usare con qualunque oggetto in modo tipizzato e questo serve proprio alla deserializzazione JSON.

Alessandro

Print | posted on lunedì 3 ottobre 2016 00:00 | Filed Under [ Visual Basic C# ]

Powered by:
Powered By Subtext Powered By ASP.NET