Próbuję napisać narzędzie ONIX do importowania książek w języku C#. Zacząłem od utworzenia klas za pomocą Xsd2Code i otrzymałem ogromny plik zawierający wszystkie właściwości, które po kilku poprawkach nie powodują żadnego błędu podczas deserializacji.Deserialize Enum z Xml za pomocą właściwości Value w C#
Próbuję deserializować cały element za jednym razem, w duży obiekt w pamięci, a następnie zrobić z nim (na przykład zapisać do bazy danych).
Sposób, w jaki Xsd2Code generował klasy, poza tym, że istnieje wiele właściwości, jest trochę dziwny, przynajmniej dla mnie.
Oto jedna z klas, które powinny być właściwością obiektu Produktu:
public partial class NotificationType
{
public NotificationTypeRefname refname { get; set; }
public NotificationTypeShortname shortname { get; set; }
public SourceTypeCode sourcetype { get; set; }
public List1 Value { get; set; }
}
chciałbym skierować swoją uwagę na tej linii:
public List1 Value { get; set; }
„List1” jest enum , zdefiniowane w ten sposób:
public enum List1
{
[System.Xml.Serialization.XmlEnum("01")]
Item01,
[System.Xml.Serialization.XmlEnum("02")]
Item02, etc...
Mój problem polega na tym, że podczas deserializacji wszystkie pola przekształcają deserializację poprawną y Z WYJĄTKÓW.
Próbowałem dekorowania właściwości z XmlEnum ("NotificationType") etc ... nic!
To jest mój kod deserializacji:
var p = new Product();
XmlSerializer pserializer = new XmlSerializer(p.GetType());
object pDeserialized = pserializer.Deserialize(reader);
p = (Product) pDeserialized;
ten sposób ten element wygląda w XML:
<NotificationType>03</NotificationType>
Obiekt, który jest w C# dla obiektu Produkt jest:
public NotificationType NotificationType { get; set; }
Jeśli zmienię to na:
public List1 NotificationType { get; set; }
deserializacji poprawnie pokazuje „Item03”, co oznacza, że nie czyta co jest w formacie XML. JEŻELI zostawiam to tak jak powyżej, właściwość "Value" klasy NotificationType nigdy nie jest wypełniona i zawsze pokazuje Item01 (domyślną wartość Enum).
Mam wyczerpane wszystkie możliwe pytania na temat SO i wyszukiwań internetowych, dlaczego DLACZEGO wartość ta działa z niektórymi typami (ciągi znaków), ale nie wylicza. Czy czegoś brakuje?
Przepraszamy za długi pytanie i kodu. Doceń wszelkie światło, które każdy może rzucić na ten temat. Utknąłem z tym przez cały dzień.
To działa! Mógłbym przysiąc, że próbowałem tego wcześniej. Myślę, że jest to atrybut, który pozwala bibliotece deserialization wiedzieć, co właściwość do wypełnienia jako wartość elementu XML. –
Nie działa dla mnie. –
Crazy, pracuję także nad ONIX! To samo działa również dla mnie, dla pojedynczej wartości z Enum. Czy masz szczęście z opróżnianiem szeregu Enums? Takich jak List91 []? –