【问题标题】:parsing json response to C# object using jquery使用 jquery 解析对 C# 对象的 json 响应
【发布时间】:2013-02-20 08:35:19
【问题描述】:

我的 WCF 服务返回了以下 JSON:

`{"DoWorkResult":[{"AAID":0,"AreaID":1,"AreaName":"Basement","AssemblyAssessmentID":1,"AssemblyID":493,"AssemblyName":"Handrail (Steel)","AssessmentID":1,"AssessmentName":"University Of WA","AttributesCount":1,"CapitalReplacementUnitCost":623,"CategoryID":7,"CategoryName":"Furniture and Fixtures","CountedUnits":7,"CreatedBy":"Admin","ElementID":37,"ElementName":"Handrails and Balustrades","FacilityID":1,"FacilityName":"Central Chilled Water Plant","FacilityPercentage":"0","IsCompleted":1,"IsHeritage":false,"IsSafetyRisk":false,"Level1Units":0,"Level2Units":0,"Level3Units":0,"Level4Units":0,"Level5Units":7,"MesurementUnit":"Items","PhotosCount":1,"RepairCost":0,"RepairNotes":"","RequiresSpecialist":false,"SiteName":"CRAWLEY","SpaceID":1,"SpaceName":"B01","TasksCount":0}]}

我的服务方式是这样的

[System.ServiceModel.OperationContract]   
    [WebInvoke(Method = "POST",
              BodyStyle = WebMessageBodyStyle.Wrapped,
              ResponseFormat = WebMessageFormat.Json,
              RequestFormat = WebMessageFormat.Json)]
    public List<BLL.BLL_AssemblyAssessment> DoWork(string id)   {


       return BLL.BLL_AssemblyAssessment.GetAssessemblyAssessmentByAssemblyAssessmentID(1, 1);

    }

我需要在 jquery ajax 中成功解析的数据。我如何将其解析为我班级的对象:

$.ajax({
            type: "POST",
            url: "MyTestService.svc/DoWork",
            data: '{"id":"3"}',
            processData: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
             alert(data);
            },
            error: function (msg) {
               // $("#errorDiv").text(msg);
               alert(msg);
            }
        });

}

【问题讨论】:

  • 我不明白你需要什么?乍一看,success 回调中的 data var 应该已经是一个对象(您的 alert(data) 是否显示 [object Object] ?)。您的具体需求是什么?
  • 我想获取数据,它应该是 BLL.BLL_AssemblyAssessment 类型的行的集合(这不是数据合同,而是一个简单的类),然后我将迭代这些行并在 html 中显示
  • @LeGEC 我在警报中收到 [object object]。

标签: asp.net wcf web-services jquery


【解决方案1】:

使用

  alert(JSON.parse(jsonString));

【讨论】:

  • 它给出错误:SyntaxError: JSON.parse: unexpected character [Break On This Error] alert(JSON.parse(data));
【解决方案2】:

在您的 javascript 代码中,使用 dataType: "json" 选项调用 $.ajax 函数让 jQuery 负责解析。

success 回调中的 data 变量已经是一个 javascript 对象。

你可以访问它的属性:

success: function(data) {
    var html = "",
        rows = data.DoWorkResult,
        lgth = rows.length,
        i, row;
    for ( i=0; i<lgth; i++ ){
        row = rows[i];
        html += "<tr><td>"+row.AAID+"</td><td>"+row.AreaName+"</td></tr>";
        // or whatever
    }

    $("#myTable").html( html );
}

据我了解,BLL.BLL_AssemblyAssessment 类是在服务器端使用的C# 类,而不是在客户端使用的javascript 类。在 javascript 中,对象不需要类定义来保存数据。

您可以将对象输出到控制台以检查其结构:

success: function(data) {
    console.log(data);
    console.log(data.DoWorkResult);
    console.log(data.DoWorkResult[0]);
}

【讨论】:

    【解决方案3】:

    我真的没有看到问题所在。

    由于您已将 JSON 指定为数据类型,因此 JSON 被解析为成功处理程序中的 javascript 对象。只需使用 $.each 对其进行迭代:

    //data.DoWorkResult is an array with one element
    
    $.each(data.DoWorkResult, function(k, v){
        alert(v.AAID); //will alert 0 one time since there is only one object in the
        //array and the value is 0 on the AAID property
    });
    

    Fiddle

    请注意,我需要在我的示例中解析 JSON,因为它不是由那里的任何 ajax 方法自动完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多