一尘不染

使用JSON.NET返回ActionResult [重复]

c#

这个问题已经在这里有了答案

Json.Net和ActionResult (2个答案)

2年前关闭。

我正在尝试编写C#方法,该方法将序列化模型并返回JSON结果。这是我的代码:

    public ActionResult Read([DataSourceRequest] DataSourceRequest request)
    {
        var items = db.Words.Take(1).ToList();
        JsonSerializerSettings jsSettings = new JsonSerializerSettings();
        jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        var converted = JsonConvert.SerializeObject(items, null, jsSettings);
        return Json(converted, JsonRequestBehavior.AllowGet);
    }

当我在Chrome中转到“单词/阅读”时,得到了以下JSON结果:

"[{\"WordId\":1,\"Rank\":1,\"PartOfSpeech\":\"article\",\"Image\":\"Upload/29/1/Capture1.PNG\",\"FrequencyNumber\":\"22038615\",\"Article\":null,\"ClarificationText\":null,\"WordName\":\"the | article\",\"MasterId\":0,\"SoundFileUrl\":\"/UploadSound/7fd752a6-97ef-4a99-b324-a160295b8ac4/1/sixty_vocab_click_button.mp3\",\"LangId\":1,\"CatId\":null,\"IsActive\":false}

我认为\“转义引号是在对对象进行两次序列化时发生的问题。从其他问题来看: WCF
JSON输出正在获取不需要的引号和反斜杠

因为我首先使用JSON.NET进行序列化,然后将结果传递给Json()函数,所以肯定看起来我正在对对象进行双重序列化。我需要手动序列化以避免引用循环,但是我认为我的View需要一个ActionResult。

如何在此处返回ActionResult?我需要还是只能返回一个字符串?


阅读 380

收藏
2020-05-19

共1个答案

一尘不染

我发现了一个类似的stackoverflow问题:
Json.Net和ActionResult

那里的答案建议使用

return Content( converted, "application/json" );

这似乎在我非常简单的页面上起作用。

2020-05-19