2014-06-10 9 views
5

Chcę serializować moją klasę o propery IPAddress.Jak serializować klasy, które zawierały właściwość 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); 
} 

Błąd: Ale ja dostaję błąd „nie można serilize IPaddress bcoz nie ma pustego konstruktora”

+0

Bardzo ważne jest, aby zrozumieć, dlaczego to ograniczenie istnieje. .NET próbuje odciąć od reprezentacji adresu IP. IPv6 jest bardzo ważne, aby rozwiązać problem z przestrzenią adresową, wkrótce pojawi się w Twojej okolicy. Jeśli chcesz serializować, musisz wybrać reprezentację, np. Int64. –

+0

Myślę, że powinieneś zadać nowe pytanie zamiast zmieniać to. Dostałeś odpowiedź opartą na tym, dlaczego 'IPAddress' nie podlega serializacji, co z chwilą, gdy twoja edycja stała się nieważna. Jeśli chcesz wiedzieć, jak serializować słownik , wyszukaj go w Internecie lub, jeśli nie możesz go tam znaleźć, zadaj ** nowe ** pytanie. Na tej podstawie wycofuję twoje pytanie do rev.1 – Default

Odpowiedz

10

nie można - XmlSerializer serializacji można tylko publiczne Właściwości/pól klas publicznych, które mają publiczne konstruktory bez parametrów. Możesz zajrzeć do innego typu serializera (np. BinaryFormatter) lub zhackować swoją klasę:

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); 
    } 
    } 
} 
Powiązane problemy