繁体   English   中英

c#中的复杂XML反序列化

[英]Complex XML deserialization in c#

这是我的blob:

<Attributes>
  <SomeStuff>...</SomeStuff>
  <Dimensions>
    <Weight units="lbs">123</Weight>
    <Height units="in">123</Height>
    <Width units="in">123</Width>
    <Length units="in">123</Length>
  </Dimensions>
</Attributes>

我正在尝试使用我的类成员上的xml属性对其进行反序列化,但我遇到了麻烦。 我正在尝试使用具有单位和值的“尺寸”类型。 如何将单位作为属性并获取值的值?

这是我正在尝试的:

[Serializable]
public class Attributes
{
  public object SomeStuff { get; set; } // Not really...

  public Dimensions Dimensions { get; set; }
}

[Serializable]
public class Dimensions
{
    public Dimension Height { get; set; }

    public Dimension Weight { get; set; }

    public Dimension Length { get; set; }

    public Dimension Width { get; set; }
}

[Serializable]
public class Dimension 
{
    [XmlAttribute("units")]
    public string Units { get; set; }   

    [XmlElement]
    public decimal Value { get; set; }
}

我知道这段代码期望维度中的实际“值”元素。 但我找不到.NET库中的任何属性装饰器,可以告诉它使用元素的实际文本,除了XmlText,但我想要一个小数...代理字段是唯一的选择吗? (例如

[XmlText] public string Text { get; set; }

[XmlIgnore]
public decimal Value
{
  get { return Decimal.Parse(this.Text); }
  set { this.Text = value.ToString("f2"); }
}

谢谢。

您可以使用XmlAttribute作为属性,使用XmlText作为文本。 因此,请尝试使用[XmlText]更改您的public decimal Value

[Serializable]
public class Dimension 
{
    [XmlAttribute("units")]
    public string Units { get; set; }   

    [XmlText]
    public decimal Value { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM