反序列化相对路径 XML

Deserializing relative path XML

在 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>

如您所见,每 2 行称为 "Proximity"。这些字段与上面的字段一致。

如果所有字段都是必填的,那没问题,代码如下所示:

[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个proximity fields和之前的fields是紧紧绑定在一起的,每一对fields都不是必填的。例如。你可以得到 xml 缺少前两行的地方。

是否有针对此类问题的属性?

您正在处理订单属性。
int 标记为 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 应该可以处理这个问题。