2009-06-16 3 views
2

.NET 3.5에서 C#을 사용하고 있습니다.IPAddress 열을 사용하여 DataTable을 serialize

System.Configuration.ApplicationSettingsBase 클래스를 사용하여 응용 프로그램 설정을로드하고 저장합니다. 보존하려는 설정 중 하나는 메모리 내 System.Data.DataTable입니다. DataTable에는 각각 UInt32 및 System.Net.IPAddress 유형의 열만 있습니다. ApplicationSettingsBase에 Save() 함수를 호출하면 다음 예외가 발생합니다.

InvalidOperationException : System.Net.IPAddress에 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다.

DataTable 대신 System.Net.IPAddress 개체를 사용하면 문제가 없습니다. 예외가 발생하는 DataTable에 대해 뭔가가 있습니다.

어떤 아이디어가 진행되고 있을까요? 그것을 고치는 방법에 대한 아이디어?

답변

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 속성을 바이너리로 변경하면이 문제가 해결 될 수 있습니다.

+0

를 해결할 수 있다고 생각하지만, 문제가 존재하는 이유는 설명하지 않습니다. 문제없이 직접 IPAddress 객체를 직렬화 할 수있을 때 DataTable을 직렬화하면 IPAddress에 매개 변수없는 생성자가 있어야합니까? –

+0

@ Matt- 코드 샘플을 추가했습니다. – RichardOD

+0

빙고! 그게 내가 찾고 있던거야. 감사! –

관련 문제