C# 可以在.net中扩展类属性吗?
我有一个图书馆。此库包含名为C# 可以在.net中扩展类属性吗?,c#,.net,C#,.net,我有一个图书馆。此库包含名为tPage的类。此tPage类未标记为可序列化。我无法修改此库。我需要序列化这个 如何扩展这个类属性 有可能吗?如果该类未标记为[Serializable],则无法序列化该类。如果从它继承,并将该属性应用于子类,序列化程序将引发异常,因为它无法序列化基类成员 解决这个问题有两种切实可行的方法: 创建一个新类t可序列化页面,该类包含与t页面相同的数据,并标记为[Serializable]。当您要执行序列化并将tSerializablePage传递给序列化程序时,将值从
tPage
的类。此tPage
类未标记为可序列化。我无法修改此库。我需要序列化这个
如何扩展这个类属性
有可能吗?如果该类未标记为
[Serializable]
,则无法序列化该类。如果从它继承,并将该属性应用于子类,序列化程序将引发异常,因为它无法序列化基类成员
解决这个问题有两种切实可行的方法:
- 创建一个新类
,该类包含与t可序列化页面
相同的数据,并标记为t页面
。当您要执行序列化并将[Serializable]
传递给序列化程序时,将值从tSerializablePage
实例复制到tPage
实例。当此实例被反序列化时,您将负责根据其包含的值创建tSerializablePage
的实例tPage
- 为
实现接口,以提供直接序列化和反序列化tPage
实例的机制tPage
如果您不熟悉手动序列化接口,前一种解决方案可能更容易实现,但是该接口是.NET Framework解决序列化不可序列化类问题的解决方案。如果未标记该类,则无法序列化该类。
[serializable]
。如果从它继承,并将该属性应用于子类,序列化程序将引发异常,因为它无法序列化基类成员
解决这个问题有两种切实可行的方法:
- 创建一个新类
,该类包含与t可序列化页面
相同的数据,并标记为t页面
。当您要执行序列化并将[Serializable]
传递给序列化程序时,将值从tSerializablePage
实例复制到tPage
实例。当此实例被反序列化时,您将负责根据其包含的值创建tSerializablePage
的实例tPage
- 为
实现接口,以提供直接序列化和反序列化tPage
实例的机制tPage
如果您不熟悉手动序列化接口,则前一种解决方案可能更容易实现,但是该接口是.NET Framework解决序列化不可序列化类问题的解决方案。它不可序列化可能是由于类的内部结构(例如,某些成员无法序列化)。因此,如果您可以对该类进行剖析/反向工程,并使其能够安全地进行序列化,请继续。否则,输入后的“黑客”将不适用于您
编程英雄
提出了很好的建议(在键入我的答案时看到了)。您可能想给他的想法一些想法。它不可序列化,可能是由于类的内部结构(例如,某些成员无法序列化)。因此,如果您可以对该类进行剖析/反向工程,并使其能够安全地进行序列化,请继续。否则,输入后的“黑客”将不适用于您
编程英雄
提出了很好的建议(在键入我的答案时看到了)。您可能想给他的想法一些想法。我假设您使用的是BinaryFormatter
。首先,我认为,BinaryFormatter
并不总是一个好主意(它确实是,而且经受不住太多的变化)。但我还建议,问题是您正在尝试序列化实现,而实际上您只需要序列化数据
我将通过编写表示系统状态的自己的DTO来解决此问题,并序列化DTO:
PageDto tmp = new PageDto(myPageInstance);
// serialize tmp
优点:
- 您知道要序列化的数据(状态)
- 它是不知情的;您可以使用不同的
实现,这并不重要页面
- 您可以通过使用适当的属性等来选择序列化程序
- 当您更新
库的版本时,它不会中断序列化(您的dto可以保持不变)页面
BinaryFormatter
。首先,我认为,BinaryFormatter
并不总是一个好主意(它确实是,而且经受不住太多的变化)。但我还建议,问题是您正在尝试序列化实现,而实际上您只需要序列化数据
我将通过编写表示系统状态的自己的DTO来解决此问题,并序列化DTO:
PageDto tmp = new PageDto(myPageInstance);
// serialize tmp
优点:
- 您知道要序列化的数据(状态)
- 它是不知情的;您可以使用不同的
实现,这并不重要页面
- 您可以通过使用适当的属性等来选择序列化程序
- 当更新
library版本时,它不会中断序列化(dto可以保持不变)Page