2013-01-02 72 views
2

我试图通过将其发布到WebApi POST方法来反序列化XML。除了有多个子节点的节点之外,一切正常,并且反序列化正常。WebApi XML反序列化 - 具有多个子节点的节点没有被正确地反序列化为子节点对象数组

的代码看起来是这样的:

[Serializable] 
public class grandparentnode 
{ 
    [XmlElement] 
    public parentnode[] parentnode { get; set; } 
} 

[Serializable] 
public class parentnode 
{ 
    public childnode childnode { get; set; } 
} 

[Serializable] 
public class childnode 
{ 
    public string foo { get; set; } 
    public string bar { get; set; } 
    public string baz { get; set; } 
} 

这是XML:

<grandparentnode> 
    <parentnode> 
     <childnode> 
      <foo>1</foo> 
      <bar>2</bar> 
      <baz>3</baz> 
     </childnode> 
     <childnode> 
      <foo>4</foo> 
      <bar>5</bar> 
      <baz>6</baz> 
     </childnode> 
     <childnode> 
      <foo>7</foo> 
      <bar>8</bar> 
      <baz>9</baz> 
     </childnode> 
    </parentnode> 
</grandparentnode> 

的问题是,在调试,所有我得到的是parentnode[]阵列中的一个项目,像这个:{WebApiListener.Controllers.FooBarBazController.parentnode[1]}。我需要parentnode作为一个数组的childnode对象。

任何想法为什么?

谢谢
彼得

+0

你childnode属性是无阵列。 – Jobo

+0

对不起,我错过了一些关闭和开放标签。现在呢?如果它不是一个数组,那么它应该表示为什么? – Wowca

+1

你的父节点的“childnode”属性应该是childnode []类型的,并且应该用[XmlElement]属性标记,我猜。 – Jobo

回答

1

随着用户@Jobo指出的那样,我用了其中的排列应进行反序列化的顺序。

这是修改后的代码:

[Serializable] 
public class grandparentnode 
{ 
    public parentnode parentnode { get; set; } 
} 

[Serializable] 
public class parentnode 
{ 
    [XmlElement] 
    public childnode[] childnode { get; set; } 
} 

[Serializable] 
public class childnode 
{ 
    public string foo { get; set; } 
    public string bar { get; set; } 
    public string baz { get; set; } 
} 
相关问题