首页 > 解决方案 > 通过序列化为 JSON 并立即反序列化来深度复制对象

问题描述

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

我主要要求 C# 和 Java 之类的语言,但是这在不同的语言中会有所不同吗?

这样做可能会出现任何问题吗?

标签: javac#jsonserializationdeep-copy

解决方案


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

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


推荐阅读