C# 两个实体类深度复制
时间: 2025-01-28 19:04:59 浏览: 43
在C#中,如果你有两个实体类,并且需要将一个对象的属性值深拷贝到另一个新对象上,可以使用序列化反序列化的机制,或者利用第三方库如`System.Runtime.Serialization.Json`或者`Newtonsoft.Json`来进行深度复制。
**1. 使用序列化/反序列化(XML/JSON)**:
```csharp
using System.IO;
using System.Text;
using System.Xml;
// 定义实体类
public class EntityClass
{
public int Id { get; set; }
// ...其他属性
}
// 深度复制示例
EntityClass original = new EntityClass();
//... 设置原始对象的属性
// 创建一个新的对象并深度复制属性
EntityClass copied = new EntityClass();
var xmlSerializer = new XmlSerializer(typeof(EntityClass));
string xml = new XmlTextWriter(new StringWriter()).WriteObject(original);
copied = (EntityClass)xmlSerializer.Deserialize(new StringReader(xml));
```
**2. 使用`System.Collections.ObjectModel.DeepCopy`**:
如果你有.NET Framework 4.5及更高版本,你可以使用`DeepCopy`方法,但这仅适用于实现了`ICloneable`接口的对象。
```csharp
using System.Collections.ObjectModel;
// 如果你的实体类实现了ICloneable接口
public class EntityClass : ICloneable
{
//...
object ICloneable.Clone()
{
return MemberwiseClone(); // 对象浅拷贝,这里需改为DeepClone()如果需要深拷贝
}
public EntityClass DeepClone()
{
// 实现深拷贝
return (EntityClass)this.MemberwiseClone();
}
}
// 深度复制
EntityClass copied = (EntityClass)(original.DeepClone());
```
**3. 使用第三方库(例如Json.NET)**:
```csharp
using Newtonsoft.Json;
// Json.NET 示例
public class EntityClass
{
//...
}
// 深度复制
string json = JsonConvert.SerializeObject(original);
copied = JsonConvert.DeserializeObject<EntityClass>(json);
```
阅读全文
相关推荐


















