Отображение простого пользовательского простого типа XSD в класс .net - PullRequest
0 голосов
/ 17 мая 2011

У меня есть XSD, который я сгенерировал с помощью xsd.exe, а затем создал класс из 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}

}

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Вы должны сделать что-то вроде этого:

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"
0 голосов
/ 17 мая 2011

Это должно сделать это:

[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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...