I am using BinaryFormatter to serialize a class and its variables by condition. For example:
[Serializable]
public class Class1
{
private Class2 B;
...
}
[S
I wrote a rather simple but extensible framework to solve this sort of problem using bindings. Not sure I completely understand but this is possible:
public class Class1
{
[Ignore]
public bool IsRemoting { get; set; }
[SerializeWhen("IsRemoting", true)]
public Class2 B;
}
http://binaryserializer.codeplex.com
As already mentioned, it doesn't exist. You could code your way out of although it is a bit messy (that is if you don't want to implement the ISerializable interface as already suggested).
[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 { }
You can't ignore it. You can only change properties on attributes at runtime and since the NonSerialized attribute doesn't take a true / false argument, you cannot do anything about it runtime.
ISerializable
, and if you do you will know which serialization context is active (remoting, file etc.)Generally speaking I advise you against using BinaryFormatter
. It is a maintenance headache if there ever was one. Use XML serialization or some kind of protocol buffers.