使用IPAddress列序列化DataTable

时间:2009-06-16 19:26:02

标签: c# .net configuration serialization

我正在使用C#和.NET 3.5。

我正在使用System.Configuration.ApplicationSettingsBase类来加载和保存应用程序设置。我想保留的一个设置是内存中的System.Data.DataTable。 DataTable分别只包含两列类型为UInt32和System.Net.IPAddress的列。当我在ApplicationSettingsBase上调用Save()函数时,我得到以下异常:

InvalidOperationException:System.Net.IPAddress无法序列化,因为它没有无参数构造函数。

如果我只使用System.Net.IPAddress对象作为设置而不是DataTable,我没有问题。在DataTable中有一些东西导致异常。

任何想法可能会发生什么?关于如何解决它的任何想法?

2 个答案:

答案 0 :(得分: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对象放在数据表中时,默认使用XmlSerializer。

有趣的是尝试将RemotingFormat属性更改为二进制,我相信这可能会解决问题。 DataTable.RemotingFormat

答案 1 :(得分:0)

我认为XmlElementAttribute可能会解决您的问题