WebApi XML反序列化 - 具有多个子节点的节点未正确反序列化为子节点对象数组

时间:2013-01-02 10:33:43

标签: c# .net asp.net-web-api

我正在尝试通过将XML发布到WebApi POST方法来反序列化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对象的数组。

知道为什么吗?

谢谢你,
彼得

1 个答案:

答案 0 :(得分: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; }
}
相关问题