Ошибка объясняет проблему - вместо этого сохраните ее как строку. Если вам нужно использовать класс IPAddress, вы можете использовать ToString и Parse для преобразования между ними. Ошибка будет вызвана тем, как DataTable выполняет сериализацию.
Попробуйте этот код:
IPAddress ip = IPAddress.Parse("192.168.0.1");
XmlSerializer serializer = new XmlSerializer(typeof(IPAddress));
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, ip);
Тогда попробуйте это:
IPAddress ip = IPAddress.Parse("192.168.0.1");
BinaryFormatter serializer = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, ip);
Вы увидите, что когда вы помещаете объект IPAddress в таблицу данных, XmlSerializer используется по умолчанию.
Интересно, попробуйте изменить свойство RemotingFormat на двоичное, я думаю, что это может решить проблему. DataTable.RemotingFormat