Deserializacja z XMLa, elemenet wymagany - jak ?

0

Deserializuje pewną klasę przy użyciu XmlSerializer:

[XmlRootAttribute]
class klasa
{
   public int numer;
}

klasa obiket = XmlSerializer.Create(typeof(klasa)).Deserialize(...) as klasa;

Jeśli w pliku xml braknie elementu <numer> to pole klasy przyjmie wartość domyślną, żaden wyjątek nie będzie rzucony. Jak sprawdzić, czy takie coś miało miejsce lub jak sprawić, aby element był wymagany podczas deserializacji ?

0

Nie rozumiem. Pole numer jest typu int i nigdy! nie będzie równe null. To znaczy: ma wartość default(int) czyli zero - a zatem jest to pełnoprawna wartość int.

Nie rozumiem stwierdzenia " klasa nie będzie miała". Jeżeli typ klasy ma to pole zadeklarowane - to zawsze będzie miała.

A wartość domyślną można zmienić przez atrybut DefaultValue
(System.ComponentModel.DefaultValueAttribute)

0

Właśnie chodzi o coś przeciwnego. Obiekt zawsze będzie miał pełnoprawną wartość i tu jest problem, bo chcę sprawdzić czy XML miał pełnoprawną wartość.
Używam XML do zapisaniu pewnej konfiguracji. Jeśli ktoś się rypnie podczas pisania skryptu, np. użyje <Numer> zamiast <numer>, albo <ort>w ogóle </ort>zapomni o tym elemencie to pole obiektu przyjmie wartość domyślną i nic o tym nie będę wiedział :/ . A akurat 0 jest prawidłową wartością.

0

nie wiem jak działa ten XMLSerializer w .NET, ale w jawie masz jeszcze adnotacje dla elementow klasy np @Element i możesz tam nadawać wartość domyślna itd, ew. możesz pójść po najlżejszej linni oporu i zwalidować plik który bedzie deserializowany :)

0

Zadeklaruj właściwość 'numer' jako typ nullable:

class klasa
{
public int? numer;
}

--
CORESOFT LAB
Marcin Zamorski

1 użytkowników online, w tym zalogowanych: 0, gości: 1