В настоящее время я создаю объект DTO
объекта для сравнения новых и старых значений. Это было прекрасно, когда это был один объект, но в будущем это изменится. Я попытался создать extension method
до serialize
и deserialize
для глубокой копии, но PostSharp
выдает сообщение об ошибке.C# сравнение объектов без создания dto
Тип 'PostSharp.Patterns.Model.NotifyPropertyChanged.ChangeTracking.ChildPropertyChangedProcessor' в Ассамблее 'PostSharp.Patterns.Model, Version = 4.2.28.0, Culture = нейтрально, PublicKeyToken = e7f631e6ce13f078' не отмечен как сериализуемый. (SerializationException)
Это мой способ расширения, и ошибка была сброшена formatter.Serialize(stream, source)
.
public static T Clone<T>(this T source)
{
if (!typeof(T).IsSerializable)
{
return default(T);
}
if (ReferenceEquals(source, null))
{
return default(T);
}
var formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T) formatter.Deserialize(stream);
}
}
Есть ли способ исправить эту ошибку или мне нужно сделать это другим способом? Если мне нужно найти другой способ, какой подход следует принять?
Пробовали ли вы обновить PostSharp 4,3? Как выглядит ваш класс с помощью аспекта NotifyPropertyChanged? –