通过序列化为JSON并立即反序列化来深度复制对象

时间:2018-05-25 14:33:43

标签: java c# json serialization deep-copy

可以将对象序列化为JSON并立即将其反序列化为原始对象类型,这是深度复制对象的有效方法。

我主要是针对像C#和Java这样的语言,但不同语言会有所不同吗?

执行此操作可能会出现任何问题吗?

1 个答案:

答案 0 :(得分:0)

似乎是合乎逻辑的,但可能效率低下。我认为有问题的对象只是一个简单的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();

您可以将此代码包含在基类中,以便您访问所有对象的复制功能。