为什么json返回null值

时间:2012-03-03 04:31:14

标签: c# javascript jquery asp.net

我有一个javascript函数,它调用asp.net c#应用程序后面的代码中的方法。我将一个数组传递给JSON.stringify,它返回相当于下面jsonText值的字符串。以下值仅代表返回的记录之一。

var jsonText = "[{\"eacItem\":{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}}]";

然后将该字符串传递给函数以调用后面代码中的方法。

$.ajax({
            type: "POST",
            traditional: true, //might be needed for serialization to work properly
            url: pagePath + "/" + "TestMethod",
            data: "{'eacArray':" + jsonText + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (data) {
                alert("successfully posted data");
            },
            error: function (data) {
                alert("failed posted data");
                alert(postData);
            }

        });

这是后面代码中的方法。

[WebMethod]
public static void TestMethod(List<eacItem> eacArray)
{
  //do something
}

这是与JSON数据集关联的类,作为方法的参数类型。

public class eacItem
{
   public string ID { get; set; }
   public string AP { get; set; }
   public string EAC { get; set; }

}

传递给方法的数据包含记录,但值均为null,如下面的屏幕截图所示。我不确定为什么会发生这种情况,并希望得到任何帮助。

null array

in code behind

请求的其他信息。以下是eacArray中值的屏幕截图。 eacArray

这是调试中的JSON字符串 JSON

JSON.stringify(eacArray)的结果 数据:“{'eacArray':”+ JSON.stringify(eacArray)+“}”,

“[{\” eacItem \ “:{\” AP \ “:\” 201407 \ “\ ”EAC \“:\ ”0 \“,\ ”ID \“:\” dc97d510-cd29-4a23 -af7f-36c0acfa1914 \ “}},{\” eacItem \ “:{\” AP \ “:\” 201304 \ “\ ”EAC \“:\ ”0 \“,\ ”ID \“:\” 69326e1b -8d69-431f-8a5b-29f8b279d74c \ “}},{\” eacItem \ “:{\” AP \ “:\” 201305 \” \ “EAC \”:\ “0 \”,\ “ID \” :\ “69326e1b-8d69-431f-8a5b-29f8b279d74c \”}},{\ “eacItem \”:{\ “AP \”:\ “201306 \” \ “EAC \”:\ “0 \”,\ “ID \”:\ “69326e1b-8d69-431f-8a5b-29f8b279d74c \”}}]“

以下是更正后的代码,以防任何人:

         //Iterate through elements on page
         $('ElementContainingValue').each(function () {
            var ap = this.attributes.ap.value;
            var id = this.attributes.id.value;
            var eac = $(this).val();
            var eacItem = { "AP": ap, "EAC": eac, "ID": id };
            eacArray.push(eacItem);

        });

        var pagePath = window.location.pathname;
        $.ajax({
            type: "POST",
            traditional: true, //might be needed for serialization to work properly
            url: pagePath + "/" + "TestMethod",
            data: "{'eacArray':" + JSON.stringify(eacArray) + "}",
            // Contents of eacArray after stringify
            // "[{\"AP\":\"201407\",\"EAC\":\"0\",\"ID\":\"dc97d510"},{\"AP\":\"201408\",\"EAC\":\"0\",\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\"}]
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (data) {
                alert("successfully posted data");
            },
            error: function (data) {
                alert("failed posted data");
                alert(postData);
            }
        });

这是后面代码中调用的方法。

    [WebMethod]
    public static void TestMethod(List<eacItem> eacArray)
    {
        foreach (var eacItem in eacArray)
        {
            string ap = eacItem.AP;
            string id = eacItem.ID;
            string eac = eacItem.EAC;
        }
    }

这是与数组关联的类。

  public class eacItem
  {
    public string ID { get; set; }
    public string AP { get; set; }
    public string EAC { get; set; }

  }

3 个答案:

答案 0 :(得分:3)

您的POST数据是:{'eacArray':" + jsonText + "}",其中不包含任何可以映射到eacItem的信息(没有匹配的属性等)。

验证您是否在请求中传递了JSON.stringify的结果(可能使用Fiddler或Wireshark)。您需要确保您希望通过网络传输的数据符合您希望发送的数据。

答案 1 :(得分:1)

M.Babcock肯定让你走在正确的轨道上我想。我几乎没有在.NET领域工作过,所以我可能会对此感兴趣,但是你的testMethod似乎期待一个List类型,实际上你传递的是字符串化的JSON看起来更像是Map。也许你需要改变你的JSON看起来更像这样?

var jsonText = "[{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}, {\"ID\":\"anotherId\",\"AP\":\"anotherAP\",\"EAC\":\"etc\"}]";

然后你会出差吗?

答案 2 :(得分:0)

删除contentType属性以使其正常工作