2

.NET 3.5 以降、json を返す Web サービスは、"d" という名前のパラメーターでデータをラップします。私が説明している機能は、他の場所の中でもここに文書化されています。

「d」と同じレベルになるパラメーターをjsonに追加する方法があるかどうか疑問に思っています。

上記の例から借用すると、私の Web サービスの 1 つの出力が

{"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 に答える