Back in 2002 I posted a question in Usenet about the IPAddress class being serializable, but not serializing in ASP.NET. I just found the post, and noticed that no one responded with the reason why:

There are two types of serialization in .NET: System.Runtime.Serialization and System.Xml.Serialization. Runtime serialization uses the SerializableAttribute while XML serialization does not. The attribute is irrelevant for XML serialization, which is used by ASP.NET.

The error I received was:

System.Net.IPAddress cannot be serialized because it does not have a default public constructor

One of the requirements of the XmlSerializer is that the type being serialized must have a default public constructor. So the answer is:

Yes, it’s serializable using runtime serialization, but not XML serialization.


2006: With .NET 3.0, DataContracts are used by newer serialization engines and are now preferred over the SerializableAttribute.

2019: System.Text.Json includes new attributes to control JSON serialization.

Attributes from the System.Runtime.Serialization namespace aren’t supported in System.Text.Json.