我有一个使用xsd.exe生成的XSD,然后在xsd上创建了一个类。一切都很好,但有些元素有共同的业务规则。例如,我们的xml中的所有金额都表示为没有小数,因此3.94 $变为394.我创建了一个xml简单类型来表示以这种方式定义的所有属性,但是还没有弄清楚如何映射xsd类型为.net类,可以处理数据如何存储在xml中的业务逻辑。我以前创建了复杂类型,但不是在属性中使用的简单类型可以指向我在正确的目录中
非常简化的XML剪辑
<Check amt="356" >
<LNItem amt="123" />
<LNItem amt="223" />
</Check>
我想要一个像下面这样的课程。
[XmlType(Check)]
public
{
AmtType Amt {get;set}
}
答案 0 :(得分:1)
你必须做这样的事情:
partial class Check
{
internal const decimal ScaleFactor = 0.01m;
private decimal amount;
[XmlAttribute("Amt")]
public decimal XmlAmount
{
get { return decimal.Round(amount / ScaleFactor); }
set { amount = value * ScaleFactor; }
}
[XmlIgnore]
public decimal Amount
{
get { return amount; }
set { amount = value; }
}
}
请注意,将decimal
除以小于零的比例因子非常重要:它会从decimal
表示中删除小数位,而乘以其倒数则不会。换句话说:
Console.WriteLine(3.94m / 0.01m); // prints "394"
Console.WriteLine(3.94m * 100m); // prints "394.00"
答案 1 :(得分:0)
这应该这样做:
[XmlRoot(Check)]
public class Check
{
[XmlElement("LNItem")]
public List<LNItem> LNItems { get; set; }
}
[XmlRoot(LNItem)]
public class LNItem
{
[XmlAttribute("amt")]
public AmtType Amt { get; set; }
}