我有一个问题,需要克隆动态对象,代码如下:
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;
我不知道实体的结构(只知道它将包含信息,而且我不知道信息的结构),并且它不会被标记为可序列化。我需要将此信息复制到实体的先前信息部分。
执行此代码的结果是“对象引用未设置为对象的实例”在fieldFormatter.Serialize行上。
如何检查它是否是对象的实例?
可能会有(很可能会有)循环引用,因此我不会尝试反射,因为我不确定如何处理它。另外,速度不是问题。
data.Info
是null
。这就是为什么你会收到异常的原因。 - Daniel Hilgarthtypeof(T)
和typeof(T).IsClass
是什么? - Daniel Hilgarth