我的程序中有这段代码
public static T CloneObjectGraph<T>(this T obj) where T : class
{
var serializer = new DataContractSerializer(typeof(T), null, int.MaxValue, false, true, null);
using (var ms = new System.IO.MemoryStream())
{
serializer.WriteObject(ms, obj);
ms.Position = 0;
return (T)serializer.ReadObject(ms);
}
}
每当我运行它时都会抛出异常outOfMemoryException 有没有更好的方法来使用内存流,或者我可以使用文件流更改此代码还是可以增加内存?
编辑: 正如@Yuriy Faktorovich建议我尝试克隆方法
public static T Clone<T>(this T obj)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable", "obj");
}
if (Object.ReferenceEquals(obj,null))
{
return default(T);
}
IFormatter formatter = new BinaryFormatter();
Stream ms = new MemoryStream();
using (ms)
{
formatter.Serialize(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(ms);
}
}
但它让我感到遗憾的是“装配中的类型未标记为可序列化” 我正在使用SqlMetal从数据库
创建类