2009-06-16 4 views
2

私は.NET 3.5でC#を使用しています。IPAddress列を使用してDataTableをシリアライズ

私はSystem.Configuration.ApplicationSettingsBaseクラスを使用して、アプリケーション設定をロードして保存しています。私が保存したい設定の1つは、メモリ内のSystem.Data.DataTableです。 DataTableには、UInt32型とSystem.Net.IPAddress型の2つの列が含まれています。 ApplicationSettingsBaseでSave()関数を呼び出すと、次の例外が発生します。

InvalidOperationException:System.Net.IPAddressは、パラメータのないコンストラクタがないためシリアル化できません。

DataTableの代わりにSystem.Net.IPAddressオブジェクトを使用するだけで問題はありません。例外を引き起こしているDataTableには何かがあります。

何が起こっている可能性がありますか?どのようにそれを修正するための任意のアイデア?

答えて

1

エラーは問題を説明しています。代わりに文字列として格納してください。 IPAddressクラスを使用する必要がある場合は、ToStringとParseを使用して2つの間で変換できます。このエラーは、DataTableがシリアル化を行う方法によるものです。

は、このコードを試してみてください。

IPAddress ip = IPAddress.Parse("192.168.0.1"); 
XmlSerializer serializer = new XmlSerializer(typeof(IPAddress)); 
MemoryStream ms = new MemoryStream(); 
serializer.Serialize(ms, ip); 

次に、この試してください:あなたはDataTableのたIPAddressオブジェクトを置いたときにXmlSerializerがデフォルトで使用されていることがわかります

IPAddress ip = IPAddress.Parse("192.168.0.1"); 
BinaryFormatter serializer = new BinaryFormatter(); 
MemoryStream ms = new MemoryStream(); 
serializer.Serialize(ms, ip); 

を。

興味深いことに、RemotingFormatプロパティをバイナリに変更してみてください。これで問題が解決する可能性があります。 DataTable.RemotingFormat

+0

を解決するかもしれないと思います。問題なく直接IPAddressオブジェクトをシリアル化できるときに、DataTableのシリアル化でIPAddressにパラメータのないコンストラクタが必要なのはなぜですか? –

+0

@ Matt-コードサンプルを追加しました。 – RichardOD

+0

ビンゴ!それが私が探していたものです。ありがとう! –

0

私はXmlElementAttributeは確かにそれを修正する一つの方法ですが、問題が存在する理由、それは説明していない、あなたの問題

+0

DataTableのIPAddress列にXmlElementAttributeを適用するにはどうすればよいですか? –

関連する問題