是否有任何方法可以使用客户端上接收的javascript json数据进行类型和字段名检查

是否有任何方法可以使用客户端上接收的javascript json数据进行类型和字段名检查,javascript,jquery,Javascript,Jquery,我的服务器上有以下类: public class JsonDialog { public IEnumerable<string> Errors { set; get; } public string Modified { set; get; } public string ModifiedBy { get; set; } public string PartitionKey { set; get; } public string Partiti

我的服务器上有以下类:

public class JsonDialog
{
    public IEnumerable<string> Errors { set; get; }
    public string Modified { set; get; }
    public string ModifiedBy { get; set; }
    public string PartitionKey { set; get; }
    public string PartitionKeyNew { set; get; }
    public string RowKey { get; set; }
    public string RowKeyNew { get; set; }
    public bool Success { set; get; }
}
在我的客户机代码中,我有以下内容:

    $.ajax({
        url: href,
        dataType: 'json',
        type: 'POST',
        data: $form.serializeArray()
        })
        .done(onDone)
        .fail(onFail);


var onDone = function (json, textStatus, XMLHttpRequest) {
    json = json || {};
    if (json.Success) {
因为我在服务器上使用一个类,编译器会检查以确保我没有任何拼写错误,例如,它不允许我输入“success=false”。但是,在客户端上没有检查,我可以编写json.sUccEss代码,这仍然可以,但它不会给我期望的结果


Javascript中是否有任何方法可以像在服务器上一样进行错误检查?像将数据放入类并让IDE检查类字段是否正确之类的事情?

也许有好的文本编辑器可以帮助您,但Javascript没有这样的东西

像TextSublime这样的编辑器可以伪造代码内省,并进行文件内搜索以帮助键入相同的名称

像Eclipse或Netbeans这样的IDE做得更好,但离您想要的还很远。 Javascript不像Java或C那样是一种强类型语言(如果我们可以说它们是的话…),所以你无法找到VS和C的所有功能


这就是你想要的,但这并没有你想要的那么先进。

可能有工具,但如果你能通过以下方式实现:

在控制器中,您呈现部分视图而不是json结果,并在该视图上传递类对象,然后在该视图上您必须编写objcetName.PropertyName并检查它。

我通过在JS中创建一个匹配对象(部分)来解决这个问题,我称之为“工厂”方法(但如果你用的是所谓的“工厂”这个词,那就用错了。它实际上更类似于“铸造”,但由于JS没有强大的类型,这也不完全正确

显然,如果您所做的只是试图让intellisense工作,那么这个代码模式也是相当冗长的,但是如果您在JS端对象上有方法……我们将虚构地说:
JsonResult.prototype.markerrorsreeved
…那么这个模式对于您获得给定“类”的实例是很有帮助的

为了简洁起见,我将使用您的C#类作为JS的基础:

var JsonResult = function () {
    this.Errors = [];
    this.Modified = null;
    this.ModifiedBy = null;
    //...rest of your properties, defaulted as necessary
}

JsonResult.factory = function (o) {
    var j = new JsonResult();
    $.extend(j, o);
    //do other processing here if needed (for example, ASP.NET serializes DateTime retardedly)
    return j;
}
AJAX

$.ajax({
    success: function(json, status, xhr) {
        var myobj = JsonResult.factory(json);
        //VS2010 will now give you intellisense w/ proper property names on myobj
        //Note: it's still buggy and sometimes won't detect things properly, but it usually works
    }
});

根据您的IDE,您可能可以使用或。但这种支持仍然比C#等静态类型语言提供的支持要有限得多。JSLint怎么能告诉我服务器上出现的变量是否拼写不同?我使用的是VS2010,我不认为编辑器中有任何东西阻止我键入任何内容在json一词之后:-(我希望有某种方法可以将类编码为javascript。javascript不是ctrl+space语言。对不起,你找不到与C#或Java类似的语言。javascript不是一种强语言。这是一种允许启用此类高级代码内省功能的方法。很抱歉,你的回答对用户来说没有多大意义。)母语为英语的。@Blazemonger这就是为什么很棒的网站在左下角有一个编辑按钮。可能不是母语为英语的人。
$.ajax({
    success: function(json, status, xhr) {
        var myobj = JsonResult.factory(json);
        //VS2010 will now give you intellisense w/ proper property names on myobj
        //Note: it's still buggy and sometimes won't detect things properly, but it usually works
    }
});