2012-02-24 13 views
8

Jak mam oznaczyć właściwości, aby nie były serializowane, jeśli mają wartości domyślne? Na przykład, jeśli mam wartość boolowską, należy ją serializować, jeśli jest ustawiona tylko na true, to samo z wartością zerową, jeśli są one zerowe, nie chcę włączać ich do mojego pliku do serializacji.Jak uniknąć wartości domyślnych dla serializacji?

+0

Jaki jest cel tego !? –

+0

mieć mniejszy szeregowy plik cos Muszę wysłać go czasami przez sieć GPRS gdzie muszę zapłacić za ruch, w każdym razie podczas przywracania (deserializacji) będą one ustawione na wartość domyślną, jeśli nie istnieją, jak uniknąć serializacji? – kosnkov

+0

Myślę, że będziesz musiał napisać własny serializator lub przetworzyć wynik wbudowanego serializera z własnymi regułami. –

Odpowiedz

22

Ok znalazłem to ja. Jest to [DefaultValue(false)]. Jeśli zaznaczę właściwość z tą wartością, to zostanie ona przekształcona do postaci szeregowej, tylko jeśli jest inna niż wartość w().

System.ComponentModel.DefaultValueAttribute

+0

Dzięki za rozwiązanie! Jakikolwiek pomysł, jak uniknąć tego, że muszę ustawić domyślną wartość dwukrotnie? '[DefaultValue (" Status ")] public string statusTag =" Status ";' – pfuhlert

4

Istnieje coś takiego jak określona właściwość. Nie mogę znaleźć na nim dokumentacji msdn, ale pomocna powinna być this article. Zasadniczo trzeba napisać coś takiego:

//this property would not be serialized if it contains String.Empty value 
public string PropertyName { get; set; } 


[XmlIgnore] 
public bool PropertyNameSpecified 
{ 
    get { return PropertyName != String.Empty; } 
} 
+0

get {return PropertyName! = String.Empty; } co to jest? porównasz bool z ciągiem znaków, a gdy dodaję xmlIgnore, nigdy nie pojawi się on w serializowanym pliku, nawet jeśli ta właściwość nie jest pusta lub jest prawdziwa w przypadku bool. – kosnkov

+0

Edytowałem swoją odpowiedź. Mam nadzieję, że daje to właściwe zrozumienie tego, co się tam dzieje. –

Powiązane problemy