序列化c#上的MemoryStream outOfMemory异常

时间:2017-12-27 17:47:04

标签: c# memorystream datacontractserializer

我的程序中有这段代码

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从数据库

创建类

0 个答案:

没有答案