Сериализация DataTable со столбцом IPAddress

2

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

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

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

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

Любые идеи, что может произойти? Любые идеи о том, как исправить это?

Теги:
serialization
configuration

2 ответа

1
Лучший ответ

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

Интересно попробуйте изменить свойство RemotingFormat на двоичный файл, я считаю, что это может решить проблему. DataTable.RemotingFormat

  • 0
    Это, безусловно, один из способов исправить это, но это не объясняет, почему проблема существует. Почему для сериализации DataTable требуется, чтобы у IPAddress был конструктор без параметров, когда я могу без проблем сериализовать объект IPAddress?
  • 0
    @ Мэтт - я добавил пример кода.
Показать ещё 2 комментария
0

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

  • 0
    Как мне применить XmlElementAttribute к столбцу IPAddress в DataTable?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню