我使用BinaryFormatter按条件序列化一个类及其变量。例如:
[Serializable]
public class Class1
{
private Class2 B;
...
}
[Serializable]
public class Class2{...}我希望变量B仅在远程处理时序列化,而不是在将其序列化到文件存储时序列化。问题:
1)我知道在XmlSerialization中,我们可以使用指定的XmlIgnore和{PropertyName}来有条件地忽略该属性。这是NonSerialized的等效方法吗?
2)对于有Serializable属性的类,运行时如何忽略?
发布于 2010-09-06 11:46:50
ISerializable来控制序列化,如果您这样做了,您将知道哪个序列化上下文是活动的(远程处理、文件等)。一般来说,我建议你不要使用BinaryFormatter。这是一个令人头疼的维护问题。使用XML序列化或某种协议缓冲区。
发布于 2010-09-06 20:37:08
可序列化的公共类ClassA { OnSerializing私有空OnSerializing(StreamingContext context) {//根据上下文或一些内部布尔BSerialized =B设置BSerialized = B;} OnSerialized私有空OnSerialized(StreamingContext context) {//清除BSerialized BSerialized = null;} OnDeserialized私有空OnDeserialized(StreamingContext context) {//从BSerialized B= BSerialized恢复B;BSerialized= null;} NonSerialized私有类B;私有ClassB BSerialized;}可序列化的公共类ClassB {}
发布于 2013-03-08 12:48:07
我写了一个相当简单但可扩展的框架来使用绑定来解决这类问题。我不确定我是否完全理解,但这是可能的:
public class Class1
{
[Ignore]
public bool IsRemoting { get; set; }
[SerializeWhen("IsRemoting", true)]
public Class2 B;
}http://binaryserializer.codeplex.com
https://stackoverflow.com/questions/3648858
复制相似问题