如何将一个对象标记为可序列化(Serializable)

3

我有一个system.document.table对象,想将其标记为可序列化,以进行深度克隆。但是出现了异常:程序集'PresentationFramework,Version=4.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35'中的类型'System.Windows.Documents.Table'未标记为可序列化。

 FlowTable original =  new FlowTable();
 original = objFlowTab.deepclone();

其中objflowtab具有表对象

[Serializable]
public class FlowTable : Table
{ ....
  ....
  public static class ExtensionMethods
{
    // Deep clone
    public static T DeepClone<T>(this T a)
    { 

        using (MemoryStream stream = new MemoryStream())
        {

            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream,a);
            stream.Position = 0;
            return (T)formatter.Deserialize(stream);
        }
    }
}

我在执行 formatter.Serialize(stream,a) 时出现了错误。

2
请除了错误信息外,还展示一些代码。 - Codor
这应该很快就能通过自己先搜索来找到。看起来你从来没有搜索过任何东西? - Hopeless
可能是重复的问题:Error - is not marked as serializable - Volkan Paksoy
请确保您的对象没有任何无法序列化的成员(例如某些类型也没有标记为“Serializable”)。在某些情况下,您需要显式实现接口“ISerializable”。 - Hopeless
坏主意。将表序列化为XAML。我怀疑二进制序列化在这里可行。 - Dennis
2个回答

9

给需要序列化的类添加[Serializable]属性。

关于C#序列化的详细信息请参见此处


2
对于可序列化的对象,您需要在类定义中包含[Serializable]
[Serializable]
public class YourClass
{
  //Your definition here;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接