javascript - asp.net mvc json.net 响应

标签 javascript asp.net-mvc json json.net

我第一次为我的 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/

相关文章:

javascript - 生成动态画廊jquery

asp.net-mvc - 在 View 中无法识别 ViewModel

javascript - jquery update &lt;input name = [i]> 如果 DOM 更改

c - C语言中有效的json检查

javascript - 如何使 ionic 元素漂浮在 ionic 头上

javascript - 在不打开相机的情况下请求相机许可

javascript - 如何跨浏览器检测在线/离线事件?

javascript - 如何不在 Mithril 中重新渲染整个列表

c - C 中的 JSON 解析器技巧

javascript - Kendo ListView - 从嵌套 JSON 中过滤字段