Десериализация относительного пути XML - PullRequest
0 голосов
/ 26 февраля 2019

В C # я хотел бы десериализовать некоторый Xml, где важно относительное расположение.Следующий XML-код взят из книжного стандарта Onix:

<Stock>
  <OnHand>1</OnHand>
  <Proximity>xx</Proximity>
  <Reserved>2</Reserved>
  <Proximity>yy</Proximity>
  <OnOrder>3</OnOrder>
  <Proximity>zz</Proximity>
  <Cbo>4</Cbo>
  <Proximity>zz</Proximity>
</Stock>

Как видно, каждая вторая строка называется «Близость».Эти поля идут вместе с полем выше.

Если бы все поля были обязательными, то это не было бы проблемой, и код выглядел бы так:

[XmlElement("OnHand", Order = 0)]public int OnHand { get; set; }
[XmlElement("Proximity", Order = 1)] public string OnHandProximity { get; set; }

[XmlElement("Reserved", Order = 2)] public int Reserved { get; set; }
[XmlElement("Proximity", Order = 3)] public string ReservedProximity { get; set; }

[XmlElement("OnOrder", Order = 4)] public int OnOrder { get; set; }
[XmlElement("Proximity", Order = 5)] public string OnOrderProximity { get; set; }

[XmlElement("CBO", Order = 6)] public int Cbo { get; set; }
[XmlElement("Proximity", Order = 7)] public string CboProximity { get; set; }

Но 4 поля близости тесно связаныпривязаны к полю ранее, и каждая пара полей не является обязательной.Например, вы можете получить xml там, где отсутствуют первые две строки.

Существуют ли какие-либо атрибуты, предназначенные для подобных задач?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы были на пути с атрибутами Заказа.
Отметьте int s как int?, а все поля как Nullable:

    [XmlElement("OnHand", Order = 0, IsNullable = true)]
    public int? OnHand { get; set; }

    [XmlElement("Proximity", Order = 1, IsNullable = true)]
    public string OnHandProximity { get; set; }

XmlSerializer должен иметь возможность справиться с этим.

...