gpt4 book ai didi

asp.net-mvc - MVC : How to Return a String as JSON

转载 作者:IT老高 更新时间:2023-10-28 12:44:01 24 4
gpt4 key购买 nike

为了使进度报告过程更加可靠并将其与请求/响应分离,我正在 Windows 服务中执行处理并将预期的响应保存到文件中。当客户端开始轮询更新时,目的是 Controller 返回文件的内容,无论它们是什么,作为 JSON 字符串。

文件的内容被预序列化为 JSON。这是为了确保没有任何东西阻碍响应。无需进行任何处理(只需将文件内容读入字符串并返回)即可获得响应。

我最初虽然这很简单,但事实并非如此。

目前我的 Controller 方法看起来是这样的:

Controller

更新

[HttpPost]
public JsonResult UpdateBatchSearchMembers()
{
string path = Properties.Settings.Default.ResponsePath;
string returntext;
if (!System.IO.File.Exists(path))
returntext = Properties.Settings.Default.EmptyBatchSearchUpdate;
else
returntext = System.IO.File.ReadAllText(path);

return this.Json(returntext);
}

Fiddler 将其作为原始响应返回

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 19 Mar 2012 20:30:05 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 81
Connection: Close

"{\"StopPolling\":false,\"BatchSearchProgressReports\":[],\"MemberStatuses\":[]}"

AJAX

更新

稍后可能会更改以下内容,但现在这在我生成响应类并将其返回为 JSON 时像正常人一样工作。

this.CheckForUpdate = function () {
var parent = this;

if (this.BatchSearchId != null && WorkflowState.SelectedSearchList != "") {
showAjaxLoader = false;
if (progressPending != true) {
progressPending = true;
$.ajax({
url: WorkflowState.UpdateBatchLink + "?SearchListID=" + WorkflowState.SelectedSearchList,
type: 'POST',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
for (var i = 0; i < data.MemberStatuses.length; i++) {
var response = data.MemberStatuses[i];
parent.UpdateCellStatus(response);
}
if (data.StopPolling = true) {
parent.StopPullingForUpdates();
}
showAjaxLoader = true;
}
});
progressPending = false;
}
}

最佳答案

我认为,问题在于 Json 操作结果旨在获取一个对象(您的模型)并创建一个 HTTP 响应,内容为来自您的模型对象的 JSON 格式数据。

不过,您传递给 Controller ​​的 Json 方法的是 JSON 格式的 字符串对象,因此它将字符串对象“序列化”为 JSON,这就是 HTTP 的内容的原因响应被双引号包围(我假设这是问题所在)。

我认为您可以考虑使用 Content 操作结果来替代 Json 操作结果,因为您基本上已经拥有可用的 HTTP 响应的原始内容。

return this.Content(returntext, "application/json");
// not sure off-hand if you should also specify "charset=utf-8" here,
// or if that is done automatically

另一种选择是将来自服务的 JSON 结果反序列化为一个对象,然后将该对象传递给 Controller ​​的 Json 方法,但缺点是您将反序列化然后重新序列化数据,这对您的目的而言可能是不必要的。

关于asp.net-mvc - MVC : How to Return a String as JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com