W języku C#, jak mogę uczynić XmlSerializer zignorować właściwość podczas serializacji, ale nie podczas deserializacji? (? Albo jak mam zrobić to samo z Json.NET)Zignoruj właściwość podczas serializacji xml, ale nie podczas deserializacji.
Aby zapobiec nieruchomości od bycia w odcinkach, można dodać atrybut XmlIgnore
:
[XmlIgnore]
public int FooBar {get;set;}
To spowoduje tag <FooBar>
zostać pominięte podczas serializacja.
Oznacza to jednak, że znacznik <FooBar>
zostanie zignorowany podczas deserializacji.
W moim przypadku akceptuję tablicę elementów od użytkownika w żądaniu, a dla każdego elementu użytkownik może określić właściwość akcji, jeśli chce dodać, zmodyfikować lub usunąć pozycję. Chcę używać tego samego obiektu modelu do wywoływania list GET i nie chcę zwracać tej właściwości akcji. Oczekuję, że będzie to dość powszechny przypadek.
Kolejny przypadek użycia: że masz obiekt circle
public class Circle
{
public double Radius { get; set; }
}
i zmodyfikować go dodać obiekt średnicy
public class Circle2
{
public double Diameter { get; set; }
public double Radius { get { return Diameter/2; } set { Diameter = value*2; } }
}
może chcesz serializacji tylko średnicę, ale nadal być można deserializować pliki xml w starym formacie, które zawierają tylko promień.
zrobiłem moje badania i nie znaleźliśmy niczego, stąd to pytanie
Rozwiązanie: zorientowali się rozwiązanie. Mogę dodać obiekt ShouldSerialize który zawsze return false, szczegóły na this MSDN documentation
(rozwiązanie to może być dodany jako rzeczywistą odpowiedź, jeśli ta kwestia jest ponownie)
Jak można nie serializować, ale następnie spodziewać się deserializacji? – Justin
Podaj właściwość wartość domyślną? .. Jak inaczej "nie ignoruj" właściwość podczas deserializacji? – dasblinkenlight
Jestem zbyt leniwy, aby przeszukać dokumenty już teraz, ale jeśli przejrzysz dokumentację json.NET, gwarantuję, że ma przykłady pokazujące, jak zignorować właściwość podczas serializacji/deserializacji. – evanmcdonnal