1

我正在开发使用 Facebook C# SDK (6.0.10.0) 和 Newtonsoft.Json (4.5.0.0) 的 asp.net mvc 4 应用程序。

使用 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,我只想更改默认序列化行为而不重新实现序列化程序等。

必须通过单行代码完成一些简单的事情来改变这种行为,我希望有人已经找到了它。

4

2 回答 2

3

不确定您是否仍在寻找答案,但您几乎已经找到了。Content 接受第二个参数,即内容类型,因此如果您将其更改为

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

它应该按预期工作

于 2013-03-13T14:50:46.550 回答
0

对于将来可能会看到这一点的任何人,当我遇到同样的错误时,根本原因是 Json 序列化失败,因为我的结果对象上没有设置显式类型。

即在我的控制器里面得到

return Json(res.Data, JsonRequestBehavior.AllowGet);whereres.Data是类型object Result<object>.Data而不是类。

于 2014-10-13T15:05:42.490 回答