条件C#二进制序列化
我正在使用BinaryFormatter按条件序列化类及其变量。例如:条件C#二进制序列化,c#,binary-serialization,C#,Binary Serialization,我正在使用BinaryFormatter按条件序列化类及其变量。例如: [Serializable] public class Class1 { private Class2 B; ... } [Serializable] public class Class2{...} 我希望变量B仅在远程处理时序列化,而不是在将其序列化到文件存储时序列化。 问题: 1) 我知道在XmlSerialization中,我们可以使用指定的[XmlIgnore]和{PropertyName}有条件地忽略属性。这
[Serializable]
public class Class1
{
private Class2 B;
...
}
[Serializable]
public class Class2{...}
我希望变量B仅在远程处理时序列化,而不是在将其序列化到文件存储时序列化。
问题:1) 我知道在XmlSerialization中,我们可以使用指定的[XmlIgnore]和{PropertyName}有条件地忽略属性。这是[非串行化]的等效方法吗?
2) 对于具有[Serializable]属性的类,如何在运行时忽略它
ISerializable
来控制序列化,如果您这样做,您将知道哪个序列化上下文处于活动状态(远程处理、文件等)BinaryFormatter
。这是一个维护头痛,如果曾经有一个。使用XML序列化或某种协议缓冲区
我编写了一个相当简单但可扩展的框架来使用绑定解决这类问题。不确定我是否完全理解,但这是可能的:
public class Class1
{
[Ignore]
public bool IsRemoting { get; set; }
[SerializeWhen("IsRemoting", true)]
public Class2 B;
}
非常感谢。在我的例子中,实现ISerializable太单调了,因为类和变量太多了。我对protobuf感兴趣。它还允许自定义序列化吗?因为我正在GetObjectData()期间转换一些值。您不必在所有类中都实现ISerializable,只需在需要自定义逻辑的类中实现ISerializable。Protobuf应该允许自定义序列化,但我不确定它是否适合您的需要;如果您的数据体系结构足够规则(即,对于何时应该序列化哪些内容有明确的规则,很少有例外),那么您最好重新考虑您的数据体系结构或生成自定义序列化代码。
public class Class1
{
[Ignore]
public bool IsRemoting { get; set; }
[SerializeWhen("IsRemoting", true)]
public Class2 B;
}