1

Facebook C#SDK(6.0.10.0)とNewtonsoft.Json(4.5.0.0)を使用するasp.netmvc4アプリケーションに取り組んでいます。

FacebookClientを使用したリクエストは、expandoオブジェクトを返します。

[Authorize]
public ActionResult GetFbData(string path = "me"){
    var expando = this.fb.Get(path);

    return Json(expando);
}

返されたJsonは次のようになります。

[{"Key":"id","Value":"100000xxxxxxxx"},{"Key":"name","Value":"John Doe"} ... ]

私はそれをフォーマットで返したい{id:100000xxxxxxx, name:"John Doe", ... }ので、これを私のfbクライアントを作成するコードに追加しました:

fb.SetJsonSerializers(JsonConvert.SerializeObject,
                      JsonConvert.DeserializeObject);

上記と同じコードが返されます:

[[[]],[[]],[[]],[[]],[[]],[[]],[[[[]],[[]]]],[[[[]],[[]]]],[[]],[[]],[[[[[[[]],[[]]...]

私は次の方法で望ましい結果を得ることができます:

return Content(JsonConvert.SerializeObject(Expando));

これは適切なJsonを返しますが、Content-Typeはtext/html; charset=utf-8です。応答ヘッダーなどを手動で設定せずにJsonResultとして目的の形式を返すにはどうすればよいのでしょうか。シリアライザーなどを再実装せずに、デフォルトのシリアル化動作を変更したいだけです。

この動作を変更するには、 1行のコードで実行される単純なものが必要です。誰かがすでにそれを見つけていることを期待しています。

4

2 に答える 2

3

まだ答えを探しているかどうかはわかりませんが、ほぼ答えが見つかりました。コンテンツは、コンテンツ タイプである 2 番目のパラメーターを受け取るため、それを次のように変更すると、

return Content(JsonConvert.SerializeObject(Expando), "application/json");

期待どおりに動作するはずです

于 2013-03-13T14:50:46.550 に答える
0

将来これを目にする可能性がある人にとっては、この同じバグに遭遇したときの根本的な原因は、結果オブジェクトに明示的な型が設定されていなかったため、Json のシリアル化が失敗したことでした。

つまり、コントローラー内で取得します

return Json(res.Data, JsonRequestBehavior.AllowGet);クラスではなく型でしたres.Dataobject Result<object>.Data

于 2014-10-13T15:05:42.490 に答える