ASP.NET MVC:将JObject作为JsonResult返回

8

我尝试将JObject作为我的操作结果返回。我使用了Newtonsoft.JsonJsonNetResult将对象转换为JsonResult。 对于普通对象,我使用以下语法将对象序列化为JsonResult:

return new JsonResult
{
    ContentType = "application/json",
    ContentEncoding = System.Text.Encoding.UTF8,
    Data = myResult,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet
};

我们希望myResult是一个预期对象的实例,但是尝试对一个JObject (Newtonsoft.Json.Linq.JObject)执行以下操作会返回无效结果,即[[[]]]

JObject jsonObject = new JObject();
jsonObject["error"] = "invalid_id";
return new JsonResult
{
    ContentType = "application/json",
    ContentEncoding = System.Text.Encoding.UTF8,
    Data = jsonObject,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet
};

在这种情况下,我该如何序列化JObject?

你想从一个操作中返回一个 JSON 对象,对吗? - Tân
@TânNguyễn 是的,我的操作将返回JsonResult作为返回类型。 - VSB
2个回答

1

这对我有用!!

        var serialized = JsonConvert.SerializeObject(response, 
                 new JsonSerializerSettings() {
                     ContractResolver = new CamelCasePropertyNamesContractResolver() 
        });

        return new ContentResult()
        {
            Content = serialized,
            ContentType = "application/json",
        };

response是C#类的一个实例,其中包含类型为JObject的属性。这导致Ok(response)对JObject内的每个属性都返回空数组符号([])。手动序列化并将其作为contentresult返回解决了我的问题。


-1

你可以尝试:

    public JsonObject GetJson_1()
    {
        var errors = new Dictionary<string, string>();
        errors.Add("Id", "invalid");

        return new JsonObject(errors);
    }

    public ActionResult GetJson_2()
    {
        var errors = new List<object>();

        errors.Add(new { Id = "invalid" });

        return Json(errors, JsonRequestBehavior.AllowGet);
    }

希望这能有所帮助!

1
没有回答问题,OP想要的是关于JObject的具体询问。 - Mick Byrne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接