2

从 .NET 3.5 开始,返回 json 的 Web 服务将数据包装在名为“d”的参数中。我正在描述的功能已在其他地方记录在这里。

我想知道是否有一种方法可以将参数添加到与“d”处于同一级别的 json 中。

所以借用上面的例子,如果我的一个网络服务的输出是

{"d":{"__type"    : "Person",
      "FirstName" : "Dave",
      "LastName"  : "Ward"}}

我想要的是

{"d":{"__type"    : "Person",
      "FirstName" : "Dave",
      "LastName"  : "Ward"},
 "z":{"__type"    : "AnotherType",
      "Property"  : "Value"}}

有没有办法做到这一点?

4

2 回答 2

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);
    }       

}
于 2012-11-16T14:16:56.777 回答
0

我不相信有办法。Web 服务函数正在返回一个对象类型。即使您尝试让它返回 Object() 也会这样做 {"d":[Object 1..., Object 2...]}

如果您确实需要特定的输出格式,您可以编写一个通用处理程序,并让 ashx 页面以您想要的特定格式返回 json。

于 2012-11-15T22:15:24.847 回答