2014-06-10 2 views
5

propery IPAddress를 갖는 클래스를 직렬화하고 싶습니다.System.Net.IPAddress 속성에 포함 된 클래스를 직렬화하는 방법?

public class Person 
{ 
public IPAddress MasterIP { get; set; } 
public Person(){} 
} 


public void SerializeMyClass() 
{ 
Person obj=new Person(); 
XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType()); 
xmlSerializer.Serialize(obj); 
} 

오류 :하지만 당신은 할 수 없습니다

+0

이 제한이있는 이유를 이해하는 것이 중요합니다. .NET은 IP 주소 표현에서 벗어나려고 노력하고 있습니다. IPv6는 주소 공간 문제를 해결하는 데 매우 중요합니다. 언젠가는 곧 이웃에게 올 것입니다. 직렬화하려면 Int64와 같은 표현을 선택해야합니다. –

+0

이 질문을 변경하는 대신 새로운 질문을해야한다고 생각합니다. 'IPAddress'가 왜 직렬화가 가능하지 않은지에 대한 답을 얻었습니다. 사전 을 직렬화하는 방법을 알고 싶다면 인터넷에서 해당 항목을 검색하거나 찾지 못하면 ** 새로운 ** 질문을하십시오. 이것을 바탕으로 rev.1에 질문을 롤백하겠습니다. – Default

답변

10

오류 "가 빈 생성자가 없습니다 bcoz 여기서 IPaddress을 serilize 수 없다"는 무엇입니까 - XmlSerializer를 만이 public 클래스의 공용 속성/필드를 직렬화 할 수 있습니다 public parameterless 생성자. 다른 serializer 형식 (BinaryFormatter 등)을 조사하거나 클래스를 해킹 할 수 있습니다.

public class Person { 
    [XmlIgnore] 
    public IPAddress MasterIP { get; set; } 
    [XmlElement("MasterIP")] 
    public string MasterIPForXml { 
    get { return MasterIP.ToString(); } 
    set { MasterIP = string.IsNullOrEmpty(value) ? null : 
     IPAddress.Parse(value); 
    } 
    } 
} 
관련 문제