【问题标题】:Sending array of objects to WCF将对象数组发送到 WCF
【发布时间】:2013-03-22 12:28:10
【问题描述】:

在我的应用程序中,我想使用 jQuery 和 Ajax 保存数据。我有一个 WCF 服务。 我想使用 ajax 保存对象列表。我尝试过使用以下代码,但它 不工作。

jquery 代码:

      var listOfObjects=new Array();
      //creating list of objects
      for(var i=0;i<5;i++)
       {   var MyEntity=new Object();
           MyEntity.TestId =i;
           MyEntity.TestId =i+"testName";
           listOfObjects.push(MyEntity);
       }

        //Saving info
        $.ajax({
            type: "POST",
            async: false,
            data: JSON.stringify(listOfObjects),
            url: "../ServiceLayer/myService.svc/SaveResults",
            contentType: "application/json; charset=utf-8",
            dataType: "json",          
            success: function () {
                alert("success");
            },
            error: function () {
                alert("Error");
            }
        });

WCF:

    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
     ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public void SaveLabResults(List<MyEntity> myEntity)
    {
          var lstEntities=myEntity;
    }

实体:

[DataContract]
public class MyEntity
{
    [DataMember]
    public string TestId { get; set; }
    [DataMember]
    public string TestName { get; set; }
}

以这种方式我正在尝试发送列表数据。但是内部服务器错误即将到来。我没有得到实际上我错的地方。还有其他方法可以将对象列表发送到 WCF 吗?

谢谢

【问题讨论】:

    标签: jquery asp.net wcf


    【解决方案1】:

    jquery 代码:

          var listOfObjects=new Array();
    
          //creating list of objects
          for(var i=0;i<5;i++)
           {   var MyEntity=new Object();
               MyEntity.TestId =i;
               MyEntity.TestId =i+"testName";
               listOfObjects.push(MyEntity);
           }
    
           var jsonList=JSON.stringify(listOfObjects);
           var dataToSend = '{"myEntity":'+jsonList+'';
    
            //Saving info
            $.ajax({
                type: "POST",
                async: false,
                data: dataToSend,
                url: "../ServiceLayer/myService.svc/SaveResults",
                contentType: "application/json; charset=utf-8",
                dataType: "json",          
                success: function () {
                    alert("success");
                },
                error: function () {
                    alert("Error");
                }
            });
    

    WCF:

        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
         ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
        public void SaveLabResults(List<MyEntity> myEntity)
        {
              var lstEntities=myEntity;
        }
    

    实体:

    [DataContract]
    public class MyEntity
    {
        [DataMember]
        public string TestId { get; set; }
        [DataMember]
        public string TestName { get; set; }
    }
    

    我缺少的是

     1.var jsonList=JSON.stringify(listOfObjects);
     2.var dataToSend = '{"myEntity":'+jsonData+''; 
    

    第二点 myEntity 键应该在最终的 json 对象中。并且键应该 与 wcf 方法对象参数相同。

    谢谢

    【讨论】:

    • 这个答案真的帮助了我,但对于其他人来说,javascript 中有一个错误。 var dataToSend = '{"myEntity":'+jsonData+'';应该是 var dataToSend = '{"myEntity":'+jsonList+'}';
    【解决方案2】:

    为您的服务器方法尝试BodyStyle = WebMessageBodyStyle.Bare 或在您的客户端代码中调用JSON.stringify 之前在您的JSON 数据中引入一个名为“myEntity”的根元素。

    【讨论】:

    • 每当我尝试 Bare 时,就会出现 {"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
    • 是的,Oliver,你说得对。我包含了一个根元素,它起作用了。非常感谢。
    【解决方案3】:

    可能是这个错误:

    //creating list of objects
      for(var i=0;i<5;i++)
       {   var MyEntity=new Object();
           MyEntity.TestId =i;
           MyEntity.TestId =i+"testName";
           listOfObjects.push(MyEntity);
       } //-------------------^--------------shouldn't it be capital M
    

    在ajax函数中:

    $.ajax({
            type: "POST",
            async: false,
            data: {data : JSON.stringify(listOfObjects)}, //<---not quite sure about it.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多