c# - 将xml反序列化为对象报错

标签 c# xml

<?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 字符串,我正在尝试将其反序列化为一个对象。这是一个自动生成的类。

[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);

最佳答案

我测试了你的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; }
}

我猜你可能会错过字段“货币”和“描述”,它们应该是可访问的,

关于c# - 将xml反序列化为对象报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27497235/

相关文章:

c# - 如何为操作实现忽略/重试/取消模式?

python - 为什么 Beautiful soup 会在文档中添加额外的 xml 声明以及如何删除它?

c# - 从 WebApi 中删除 XML 命名空间

c# - 如何从 ListView 中隐藏复选框

c# - 转换器和枚举以更改 TextBlock 的前景色

c# - 向文件添加文本显示在一长行中

c# - USB显微镜的自动对焦算法

java - 泽西 REST 标志 xml

java - 如何替换xml文件中字符串的一部分?

xml - 将 Clob 与 Spring NamedParameterJdbc 模板结合使用