意外的节点类型元素

Posted

技术标签:

【中文标题】意外的节点类型元素【英文标题】:Unexpected node type Element 【发布时间】:2014-10-30 13:20:27 【问题描述】:

我有以下XML

<Envelope>
 <Body>
  <RESULT>
   <SUCCESS>TRUE</SUCCESS>
   <RecipientId>9876543210</RecipientId>
   <ORGANIZATION_ID>12345-67890-b9e6bcd68d4fb511170ab3fcff55179d</ORGANIZATION_ID>
  </RESULT>
 </Body>
</Envelope>

我试图反序列化为:

[XmlRoot(ElementName = "Envelope")]
public class Add_Recipent_response

    public string Body  get; set; 
    public string RESULT  get; set; 
    public string SUCCESS  get; set; 
    public string RecipientId  get; set; 
    public string ORGANIZATION_ID  get; set; 

用这个方法:

protected void deserializeXML(string xmlResponse)

    XmlSerializer deserializer = new XmlSerializer(typeof(Add_Recipent_response));
    using (TextReader reader = new StringReader(xmlResponse))
    
        try
        
            Add_Recipent_response XmlData = (Add_Recipent_response)deserializer.Deserialize(reader);
        
        catch (Exception ex)
        
            Console.WriteLine(ex.GetBaseException());
        
    

这会引发异常:

InnerException = "Unexpected node type Element. ReadElementString method can only be called on elements with simple or empty content. Line 4, position 2."

谁能告诉我我做错了什么?

【问题讨论】:

您可以使用visual studio msdn.microsoft.com/en-us/library/hh371548(v=vs.110).aspx从xml/json 生成类 【参考方案1】:

Body 和 Result 也应该是一个类,因为它包含元素。类似的东西

[XmlRoot(ElementName = "Envelope")]
public class Add_Recipent_response

    public Body Body  get; set; 


public class Body

    public Result RESULT  get; set; 


public class Result

    public string SUCCESS  get; set; 
    public string RecipientId  get; set; 
    public string ORGANIZATION_ID  get; set; 

【讨论】:

谢谢 - 我是序列化的新手。我会试一试... -EDIT- 刚试了一下,它的工作原理,非常感谢。只要允许,我就会接受。

以上是关于意外的节点类型元素的主要内容,如果未能解决你的问题,请参考以下文章

DOM—节点

HTML DOM 中 元素节点和属性节点是啥关系

DOM中元素节点,属性节点,文本节点的理解

如何将前缀类型添加到重复父节点并使用 XSLT 选择每个元素的所有元素?

JavaScript HTML DOM 元素(节点)

什么是否元素的节点的示例?