从.NET 3.5开始,返回json的Web服务将数据包装在名为“d”的参数中。我正在描述的功能已在其他地方记录here。
我想知道是否有办法向json添加一个与“d”处于同一级别的参数。
所以借用上面的例子,如果我的一个Web服务的输出是
{"d":{"__type" : "Person",
"FirstName" : "Dave",
"LastName" : "Ward"}}
我希望它是什么
{"d":{"__type" : "Person",
"FirstName" : "Dave",
"LastName" : "Ward"},
"z":{"__type" : "AnotherType",
"Property" : "Value"}}
有没有办法实现这个目标?
答案 0 :(得分:1)
虽然不建议这样做。 JSON结果被包装为安全功能。
然而,如果你绝对需要,这是一个解决方案:
在需要更改元素的[WebMethod]
中添加
Context.Response.ClearContent();
Context.Response.Filter = new JsonHackFilter(Context.Response.Filter);
JsonHackFilter
class JsonHackFilter : MemoryStream
{
private readonly Stream _outputStream = null;
public JsonHackFilter(Stream output)
{
_outputStream = output;
}
public override void Write(byte[] buffer, int offset, int count)
{
string bufferContent = Encoding.UTF8.GetString(buffer);
// TODO: Manually manipulate the string here
_outputStream.Write(Encoding.UTF8.GetBytes(bufferContent), offset,
Encoding.UTF8.GetByteCount(bufferContent));
base.Write(buffer, offset, count);
}
}
答案 1 :(得分:0)
我不相信有办法。 Web服务功能正在返回对象类型。即使你试图让它返回Object()也会做{“d”:[Object 1 ...,Object 2 ...]}
如果您确实需要特定的输出格式,您可以编写一个Generic Handler,并让ashx页面以您想要的特定格式返回json。