[英]Conditional C# Binary Serialization
我正在使用BinaryFormatter按條件序列化一個類及其變量。 例如:
[Serializable]
public class Class1
{
private Class2 B;
...
}
[Serializable]
public class Class2{...}
我希望僅在遠程處理時間將變量B序列化,而不是在將其序列化到文件存儲時才進行序列化。 問題:
1)我知道在XmlSerialization中,我們可以使用[XmlIgnore]和{PropertyName} Specified來有條件地忽略該屬性。 這是[NonSerialized]的等效方法嗎?
2)對於具有[Serializable]屬性的類,如何在運行時忽略它?
我編寫了一個相當簡單但可擴展的框架,以使用綁定來解決此類問題。 不確定我是否完全理解,但這是可能的:
public class Class1
{
[Ignore]
public bool IsRemoting { get; set; }
[SerializeWhen("IsRemoting", true)]
public Class2 B;
}
ISerializable
來控制序列化,如果您這樣做,您將知道哪個序列化上下文處於活動狀態(遠程處理,文件等)。 一般來說,我建議您不要使用BinaryFormatter
。 如果有的話,這是一個維護難題。 使用XML序列化或某種協議緩沖區。
如前所述,它不存在。 盡管有些混亂(即使您不想像已經建議的那樣實現ISerializable接口),也可以編寫出自己的方法。
[Serializable] public class ClassA { [OnSerializing] private void OnSerializing(StreamingContext context) { //Set BSerialized = B based on context or some internal boolean BSerialized = B; } [OnSerialized] private void OnSerialized(StreamingContext context) { //Clear BSerialized BSerialized = null; } [OnDeserialized] private void OnDeserialized(StreamingContext context) { //Restore B from BSerialized B = BSerialized; BSerialized = null; } [NonSerialized] private ClassB B; private ClassB BSerialized; } [Serializable] public class ClassB { }
您不能忽略它。 您只能在運行時更改屬性的屬性,並且由於NonSerialized屬性不采用true / false參數,因此您無法在運行時對其進行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.