如何将对象标记为可序列化

Posted

技术标签:

【中文标题】如何将对象标记为可序列化【英文标题】:how to mark an object as Serializable 【发布时间】:2015-12-26 19:46:09 【问题描述】:

我有一个 system.document.table 对象,我想将该对象标记为可序列化以进行深度克隆。例外情况是 Type 'System.Windows.Documents.Table' in Assembly 'PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 未标记为可序列化。

 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); 中遇到错误

【问题讨论】:

请在错误信息之外显示一些代码。 这个应该先自己搜索一下就知道了。看起来你从来没有搜索过任何东西? Error - is not marked as serializable 的可能重复项 确保您的对象没有任何无法序列化的成员(例如某些类型也没有Serializable 标记)。在某些情况下,您需要显式实现接口ISerializable 坏主意。将表序列化为 XAML。我怀疑,二进制序列化在这里会起作用。 【参考方案1】:

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

查看C#序列化详情here

【讨论】:

【参考方案2】:

对于可序列化的对象,您必须在类定义中包含 [Serializable]

[Serializable]
public class YourClass

  //Your definition here;

【讨论】:

以上是关于如何将对象标记为可序列化的主要内容,如果未能解决你的问题,请参考以下文章

如何识别c__DisplayClass未标记为可序列化的位置

类型“System.Web.HttpInputStream”未标记为可序列化

创建 WCF 代理时数据协定未标记为可序列化

错误 - 未标记为可序列化

AppDomain CreateInstanceAndUnwrap:类型未标记为可序列化

UserControl 集合未标记为可序列化