Сериализация DataTable со столбцом IPAddress - PullRequest
2 голосов
/ 16 июня 2009

Я использую C # с .NET 3.5.

Я использую класс System.Configuration.ApplicationSettingsBase для загрузки и сохранения настроек приложения. Одна из настроек, которую я хотел бы сохранить, - это System.Data.DataTable в памяти. DataTable содержит только два столбца типа UInt32 и System.Net.IPAddress, соответственно. Когда я вызываю функцию Save () в ApplicationSettingsBase, я получаю следующее исключение:

InvalidOperationException: System.Net.IPAddress не может быть сериализован, поскольку у него нет конструктора без параметров.

Если я просто использую объект System.Net.IPAddress в качестве параметра вместо DataTable, у меня нет проблем. В DataTable есть что-то, что вызывает исключение.

Есть идеи, что может происходить? Есть идеи как это исправить?

Ответы [ 2 ]

1 голос
/ 16 июня 2009

Ошибка объясняет проблему - вместо этого сохраните ее как строку. Если вам нужно использовать класс 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

0 голосов
/ 16 июня 2009

Я думаю, XmlElementAttribute может решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...