Сбой образца XmlSerializer из MSDN

Я пытаюсь научиться использовать XMLSerializer. Я создал проект VS2010, используя пример кода: http://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.100).aspx.

Предполагается, что код десериализует простой XML-документ в простой объект C#. Он компилируется и запускается без ошибок, но не может восстановить объект C#. Все поля остаются либо 0, либо нулевыми.

У меня есть .NET Framework 4.0, как того требует образец. Я ставлю точку останова на последний Console.Write и вижу, что все значения равны 0 или null.


person John Pankowicz    schedule 09.03.2013    source источник


Ответы (1)


Проблема заключается в файле XML в образце. Имена элементов имеют префикс пространства имен XML, поэтому сериализатор не сопоставляет их с необработанными полями типа OrderedItem. Если вы удалите пространства имен в XML-файле, этот пример будет работать правильно.

В качестве альтернативы вы можете украсить тип OrderedItem, чтобы он содержал правильные пространства имен, используемые в файле simple.xml.

public class OrderedItem
{
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public string ItemName;
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public string Description;
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public decimal UnitPrice;
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public int Quantity;
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public decimal LineTotal;

    // A custom method used to calculate price per item.
    public void Calculate()
    {
        LineTotal = UnitPrice * Quantity;
    }
}
person JaredPar    schedule 09.03.2013
comment
О, пространства имен XML, такие полезные, но... иногда... такие раздражающие. - person ta.speot.is; 09.03.2013
comment
@ta.speot.is В основном раздражает. :-П - person Brian Rogers; 09.03.2013
comment
Спасибо, ДжаредПар. Оба метода, которые вы предложили, работали так, как вы сказали. Я не должен был предполагать, что пример кода MSDN должен работать как есть. Я предположил, что это, скорее всего, что-то с моей настройкой. - person John Pankowicz; 09.03.2013