我在使用如下代码克隆动态对象时遇到问题:
public void Execute(IPrepareData entity)
{
try
{
dynamic data = entity.Primary as dynamic;
data.PreviousInfo = deepClone(data.Info);
}
catch (Exception ex)
{
data.Errors.Add(ex.Message);
}
}
private static T deepClone<T>(T obj)
{
if (typeof(T).IsClass || typeof(T).IsArray)
{
if (ReferenceEquals(obj, null))
{
return default(T);
}
}
using (var memoryStream = new MemoryStream())
{
BinaryFormatter fieldFormatter = new BinaryFormatter();
fieldFormatter.Serialize(memoryStream, obj);
memoryStream.Position = 0;
return (T)fieldFormatter.Deserialize(memoryStream);
}
}
dynamic data;
我事先不知道实体的结构(只知道它会包含Info,我不知道info的结构)并且它不会被标记为可序列化。我需要将此信息复制到实体的先前信息部分。
此代码的执行结果是 fieldFormatter.Serialize 行上的“对象引用未设置为对象的实例”。
如何检查它是否是对象的实例?
可能有(很可能会有)循环引用,所以我没有尝试反思,因为我不确定如何处理。速度也不是问题。