【问题标题】:Using MVC 4 Web API, how do I change the format of the ArrayOf node when returning an array in XML使用 MVC 4 Web API,在 XML 中返回数组时如何更改 ArrayOf 节点的格式
【发布时间】:2012-10-24 10:41:42
【问题描述】:

我想在返回IEnumerable<T>时控制根节点的输出。目前,我得到一个<ArrayOf_> 节点作为根:

<ArrayOfMyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <MyClass>
            <Number>1</Number>
    </MyClass>
    <MyClass>
            <Number>2</Number>
    </MyClass>
</ArrayOfMyClass>

我希望能够将其更改为其他内容(就此而言,没有命名空间):

<NewRoot>
    <MyClass>
            <Number>1</Number>
    </MyClass>
    <MyClass>
            <Number>2</Number>
    </MyClass>
</NewRoot>

我不想创建组类,因为虽然这适用于 XML,但我不希望 JSON 输出中的组类集合属性:

{
    "ListOfMyClass": [
        {
            "Number": 1
        },
        {
            "Number": 2
        }
    ]
}

相反,我想保持默认状态:

[
    {
        "Number": 1
    },
    {
        "Number": 2
    }
]

我意识到似乎已经回答了一些类似的问题,但所有这些问题都将我带入了死胡同。我也可以自己破解结果(糟糕),但我希望有一种最佳实践方法可以使用提供的东西来做到这一点;注释、格式化程序等。

在将 JSON 输出保留为默认值的情况下,是否有人在这方面取得了任何成功?

【问题讨论】:

    标签: xml asp.net-mvc json xml-serialization asp.net-web-api


    【解决方案1】:

    你试过了吗?

    public MyController : ApiController
    {
        public NewRoot Get()
        {
            // return data
        }
    }
    
    public NewRoot: IEnumerable<MyClass>
    {
    }
    

    【讨论】:

    • 我必须将 [CollectionDataContract(Name = "Array", Namespace="")] 添加到 NewRoot 类中,然后它才起作用。
    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2012-08-29
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多