gpt4 book ai didi

c# - 使用 IPAddress 列序列化 DataTable

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:07 24 4
gpt4 key购买 nike

我在 .NET 3.5 中使用 C#。

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

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

如果我只是使用 System.Net.IPAddress 对象而不是 DataTable 作为设置,我没有问题。 DataTable 中的某些内容导致了异常。

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

最佳答案

错误解释了问题 - 将其存储为字符串。如果您需要使用 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

关于c# - 使用 IPAddress 列序列化 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com