如何将对象标记为可序列化
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”未标记为可序列化