Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disadvantage of making class to Serializable

I'm using Azure Cache preview and need to make some classes Serializable.

Is there any disadvantage of making class to be Serializable - such as performance issue?

[Serializable]
public class MyClass {}

I found few related questions, but they are not about disadvantages.

  1. Are all .NET exceptions serializable?

  2. Drawbacks of marking a class as Serializable

Thank in advance

like image 729
Win Avatar asked Oct 05 '12 22:10

Win


People also ask

What are the disadvantages of Serializable?

The Serializable interface does not offer fine-grained control over object access - although you can somewhat circumvent this issue by implementing the complex Externalizable interface, instead.

Why is serialization not good?

Serialization is brittle, it pokes into private field, violates constructor invariance, it's horrible in so many ways. The only thing appealing about it is that it's easy to use in simple use cases. That's what motivated getting it in there.

What happens if a class implements Serializable?

If a super class implements Serializable, then its sub classes do automatically. When an instance of a serializable class is deserialized, the constructor doesn't run. If a super class doesn't implement Serializable, then when a subclass object is deserialized, the super class constructor will run.

What is wrong with Java serialization?

If your object has changed, more than just adding simple fields to the object, it is possible that Java cannot deserialize the object correctly even if the serialization ID has not changed. Suddenly, you cannot retrieve your data any longer, which is inherently bad.


2 Answers

No, there is no intrinsic overhead simply in being marked as [Serializable]. The only problem I'd have is that BinaryFormatter and NetDataContractSerializer are lousy serializers, and most other serializers aren't interested in this flag (ok, I may be biased)

like image 146
Marc Gravell Avatar answered Oct 25 '22 09:10

Marc Gravell


Assuming you're talking about the cost of using the Serializable attribute rather than the actual serialization process, one drawback would be that a third party would normally assume that the class is designed to be serializable. Whilst this may be the case, if you're just marking it serializable for the sake of it (and if there's a chance a third party might interact with it), then you'd probably want to spend time ensuring that the class is suited to be serialised in an efficient manner. So it's more of a resource tradeoff than a technical one, from that point of view.

From a technical standpoint, as Marc Gravell said, just using the attribute won't really have any overhead.

like image 42
keyboardP Avatar answered Oct 25 '22 09:10

keyboardP