gpt4 book ai didi

c#比较对象而不创建dto

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:52 24 4
gpt4 key购买 nike

目前我正在创建一个对象的 DTO 来比较新旧值。当它是一个对象时很好,但在未来这将会改变。我尝试创建一个扩展方法序列化反序列化以获得深层复制,但是PostSharp抛出错误。

Type 'PostSharp.Patterns.Model.NotifyPropertyChanged.ChangeTracking.ChildPropertyChangedProcessor' in Assembly 'PostSharp.Patterns.Model, Version=4.2.28.0, Culture=neutral, PublicKeyToken=e7f631e6ce13f078' is not marked as serializable. (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);
}
}

有没有办法修复这个错误,还是我必须用其他方法来解决这个问题?如果我必须找到另一种方法,我应该采用什么方法?

最佳答案

你可以使用 AutoMapper也为此:(每个应用程序都应该使用它,所以有什么害处?)

var clone = new Poco();
Mapper.CreateMap<Poco, Poco>();
Mapper.Map<Poco, Poco>(source, clone);

关于c#比较对象而不创建dto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40538686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com