java - 通过序列化为 JSON 并立即反序列化来深度复制对象
问题描述
将对象序列化为 JSON 并立即将其反序列化回原始对象类型是否是深度复制对象的有效方法。
我主要要求 C# 和 Java 之类的语言,但是这在不同的语言中会有所不同吗?
这样做可能会出现任何问题吗?
解决方案
看起来合乎逻辑,但可能有点低效。我认为有问题的对象只是一个简单的 poco。
你也可以使用反射来做到这一点。
此代码将复制对象的属性并返回新副本的实例
public TTranslateTo TranslateTo<TTranslateTo>()
{
var target = Activator.CreateInstance<TTranslateTo>();
foreach (var p1 in GetObjectTypeProperties)
{
var p2 =
target.GetType()
.GetProperties()
.FirstOrDefault(p => string.Equals(p.Name, p1.Name, StringComparison.CurrentCultureIgnoreCase) && p.PropertyType == p1.PropertyType);
p2?.SetValue(target, p1.GetValue(this));
}
return target;
}
private IEnumerable<PropertyInfo> GetObjectTypeProperties => GetType()
.GetProperties();
您可以将此代码包含在基类中,使您可以访问所有对象的复制功能。
推荐阅读
- microsoft-cognitive - 在具有范围值的研究名称字段上使用 CalcHistogram 不会返回结果
- php - 从动态文本框sqlserver多次插入
- socrata - Sodapy HTTPError:403 客户端错误:禁止
- python - Keras 是否具有将输入词向量复制并反向传播到仅一组的功能?
- javascript - Angular 应用程序中的自定义非 Angular JavaScript
- html - 单击菜单时的悬停效果
- sql-server-2008 - 从每组中选择前 N 行
- javascript - amchart.js 雷达图在插入引导列时不可见
- python - 标点符号导致错误
- vue.js - 如何从另一个数据属性引用 Vue 数据属性