2014-12-16 3 views
3
<?xml version="1.0" encoding="UTF-8"?> 
<Order xmlns="urn:schemas-alibaba-com:billing-data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Currency>USD</Currency> 
    <Description>description</Description> 
</Order> 

У меня есть указанная выше строка xml, которую я пытаюсь десериализовать для объекта. Это автоматически сгенерированный класс.Deserializing xml to object вызывает ошибку

[XmlTypeAttribute(AnonymousType = true, 
        Namespace = "urn:schemas-alibaba-com:billing-data")] 
[XmlRootAttribute(ElementName="Order", 
        Namespace = "urn:schemas-alibaba-com:billing-data", 
        IsNullable = false)] 
public partial class Order 
{ 
    private string currencyField; 

    private object descriptionField; 
} 

Я получаю исключение:

Exception:  
{"There is an error in XML document (1, 2)."} 
Inner exception : 
{"<Order xmlns='urn:schemas-alibaba-com:billing-data'> was not expected."} 

Что я здесь отсутствует? Ниже приведен код десериализации: строка 3 выдает исключение.

var xmlReader = new StringReader(xml_data); 
var serializer = new XmlSerializer(typeof(Order));  
var instance = (Order)serializer.Deserialize(xmlReader); 
+0

я сделал. но у моего xml есть пространство имен, и поэтому я думаю, что это не должно быть исключение. – keeda

+1

@keeda ты уверен? Это работает. Вы изменяете содержимое xml в памяти ... все, что вы передаете в 'xml_data'? Вы меняете кодировку или что-то в этом роде? – Leo

+0

@Leo Я использую строку прямо, что я извлекаю из db. похоже, все в порядке. – keeda

ответ

2

Я тестирую ваш xml-контент, это нормально.

Вот мой код:

[TestMethod] 
public void Xml_ShouldBeDeserialized() 
{ 
    var serializer = new XmlSerializer(typeof (Order)); 
    using (var stream = File.OpenRead(@"D:\test.xml")) 
    { 
     var obj = serializer.Deserialize(stream); 
     var order = obj as Order; 
     Assert.IsNotNull(order);     
    } 
} 

[XmlTypeAttribute(AnonymousType = true, 
       Namespace = "urn:schemas-alibaba-com:billing-data")] 
[XmlRoot(ElementName = "Order", 
        Namespace = "urn:schemas-alibaba-com:billing-data", 
        IsNullable = false)] 
public partial class Order 
{ 
    private string currencyField; 

    private object descriptionField; 

    public string Currency { get; set; } 

    public string Description { get; set; } 
} 

Я думаю, вы можете пропустить поля «Валюта» и «Описание», и они должны быть, доступными,

+0

Как это исправить ошибку?!?!?!?! AFAIK, это не решает ошибку, которую он получал ... Я что-то упустил? – Leo