C# клонирование объектов в PCL
Обычно при клонировании объекта в .NET, я просто использую BinaryFormatter
, он будет автоматически выполняться глубокое копирование объекта. Но при написании кода на PCL мы не имеем возможности использовать BinaryFormatter
и поэтому приходится искать другие варианты.
Я не большой поклонник делать копирование вручную, путем создания нового экземпляра класса. Это чревато ошибка связанными с последующим изменением существующих классов.
Поэтому, для решения этой задачи, я начал использовать JSON.Net. Итак, давайте посмотрим на то, как это может быть реализовано:
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));
}
Теперь, когда мы должны клонировать объект, делаем это так.
var original = new NestedObject();
var clone = original.Clone();