Replacing DataContract serialization with Binary one in Azure Service Fabric
You should probably remove empty braces inside attributes. [OnSerializing()] => [OnSerializing].
This loop is very hard to read due to how you use offsets.     


foreach (var property in GetType()
        .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
        .Where(p =&gt; p.CanRead &amp;&amp; p.CanWrite))
        property.SetValue(this, property.GetValue(obj));



Mainly because it is impossible to tell at first glace where foreach statement ends and loop body begins. Use offsets to separate them:

foreach (var property in GetType()
                        .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                        .Where(p =&gt; p.CanRead &amp;&amp; p.CanWrite))
    property.SetValue(this, property.GetValue(obj));


Or just add { } braces (that's what I would do).
State is probably not the best name for a property, its too generic. Maybe SerializedState or BinaryData would do a better job at explaining its purpose.
It would be nice to have some control over which properties are deserialized. You know, similar to how you can use XmlIgnore attribute to skip a property during xml (de-)serialization.
Unless what you do should be completely obvious to anyone working with Azure, you should add some basic documentation. I am not familiar with Azure, and to me it is unclear what problem you are trying to solve, why do you solve it using inheritance as opposed to using separate non-abstract binary serializer or wtf Recursive property is used for. You might want to explain some of those things in your code using xml-documentation.