是否有一种方法在OData查询中指定,而不是返回某些名称/值对,而应返回原始数组?例如,如果我有一个OData查询导致以下结果:
{
"@odata.context": "http://blah.org/MyService/$metadata#People",
"value": [
{
"Name": "Joe Smith",
"Age": 55,
"Employers": [
{
"Name": "Acme",
"StartDate": "1/1/1990"
},
{
"Name": "Enron",
"StartDate": "1/1/1995"
},
{
"Name": "Amazon",
"StartDate": "1/1/1999"
}
]
},
{
"Name": "Jane Doe",
"Age": 30,
"Employers": [
{
"Name": "Joe's Crab Shack",
"StartDate": "1/1/2007"
},
{
"Name": "TGI Fridays",
"StartDate": "1/1/2010"
}
]
}
]
}
我可以在查询中添加任何内容而不是返回:
{
"@odata.context": "http://blah.org/MyService/$metadata#People",
"value": [
{
"Name": "Joe Smith",
"Age": 55,
"Employers": [
[ "Acme", "1/1/1990" ],
[ "Enron", "1/1/1995" ],
[ "Amazon", "1/1/1999" ]
]
},
{
"Name": "Jane Doe",
"Age": 30,
"Employers": [
[ "Joe's Crab Shack", "1/1/2007" ],
[ "TGI Fridays", "1/1/2010" ]
]
}
]
}
虽然我显然可以进行转换客户端,但在我的用例中,字段名称与数据相比非常大,我宁愿不通过线路传输所有这些名称,也不会在客户端上花费CPU周期来执行转型。在我提出自己的自定义参数以表明格式应该符合我的要求之前,我想检查一下是否已经有了标准化的方法。
答案 0 :(得分:0)
OData提供了几个选项来控制要包含在响应中的数据量和元数据量。
在OData v4 中,您可以将odata.metadata=minimal
添加到Accept
标头参数中(请查看文档here)。这是默认行为,但即使这样,它仍然会在响应中包含字段名称,这是有充分理由的。
我可以看到为什么你只想发送没有字段名称的值,但请记住,这会改变响应结构的语义。它将使得在客户端处理json记录时不那么直观。
所以回答你的问题,答案是'不',
最小化响应大小的其他选项:
您可以使用 $ value OData选项获取单个属性的原始值。 检查此示例: services.odata.org/OData/OData.svc/Categories(1)/Products(1)/Supplier/Address/City/$value
您还可以使用 $ select 选项,通过选择要包含在响应中的属性子集来选择您需要的字段