我第一次为我的 ASP.NET MVC2 网站实现 Json.NET。
我原来的代码是这样的:
[HttpPost]
public ActionResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
return Json(new
{
success = success,
results = results
});
}
结果有问题,因为结果集中的一项是枚举,我真的想要文本值,而不是数字值。此外,日期格式也是一个问题。
然后,我找到了 Json.NET 并将我的代码更改为:
[HttpPost]
public JsonNetResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = results;// how to add success true/false info?
return jsonNetResult;
}
这解决了上述两个问题,但现在我想知道如何使它与我现有的期待 json 的 javascript 代码无缝连接,如下所示:
{
"success":true,
"results":[{
"UserId":545,
"FirstName":"Scott",
"LastName":"Roberson"}]
}
这让我可以在继续写出答案之前先测试 response.success,而不是进入该部分来处理错误。
所以,我的问题是如何在结果节点旁边添加一个顶级成功 json 节点?
谢谢。
更新:
通常情况下,写出问题的行为会激发其中一个 Doh 的想法!时刻。
如果我添加:
var returnPackage = new { success = success, results = results};
然后像这样将其添加到 jsonNetResult.Data 中:
jsonNetResult.Data = returnPackage;
它完美地工作。
谢谢,无论如何。
最终代码:
[HttpPost]
public JsonNetResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
var returnPackage = new { success = success, results = results};
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = returnPackage;
return jsonNetResult;
}
最佳答案
这是我在 MVC/Ajaxy 应用程序中所做的。定义一个新类:
public class JsonResultData
{
private bool _success = true;
public bool Success
{
get { return _success; }
set { _success = value; }
}
public object Value { get; set; }
public List<string> Errors { get; set; }
public JsonResultData()
{
this.Errors = new List<string>();
}
}
然后将您的返回数据值设置为:
jsonNetResult.Data = new JsonResultData { Value = results };
JsonResultData.Success 属性是您首先要在 json 响应中测试的内容。它默认为 true,但如果您的服务器端方法出现问题,您可以将其设置为 false 并添加您的错误消息,如下所示:
catch (Exception ex)
{
List<string> errors = new List<string>();
errors.Add(ex.ToString());
jsonNetResult.Data = new JsonResultData { Success = false, Errors = errors };
}
关于javascript - asp.net mvc json.net 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034083/