0

我想将 JSON 数据发送到我的 WCF 服务,但在服务中,我的对象始终为空。我已经阅读了很多文章,但我无法解决我的问题。

[WebInvoke(UriTemplate = "/POST/PersonPost", Method = "POST",BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
 public Person InsertPerson(Person per)
 {   Debug.WriteLine("InsertPerson");
     if (per == null)
    {
       return new Person("2", "null");
    }

    Debug.WriteLine("POST:[PersonId = {0} PersonName = {1}]", per.Id, per.Name);
        return new Person("1", "InsertPerson");
  }

[DataContract]
    public class Person
    {

        public Person(string id, string name)
        {
            this.id = id;
            this.name = name;
        }
        [DataMember]
        public string Id { get; set; }
        [DataMember]            
        public string Name { get; set; }

        public override string ToString()
        {
            var json = JsonConvert.SerializeObject(this);
            return json.ToString();
        }
    }

这里是我的 jQuery:

var person = {};
                person.Id = "abc123";
                person.Name = "aaaa";
                var per = {};
                per.per = person;

                var param = JSON.stringify(per);


                //param =   "{"per":{"Id":"abc123","Name":"aaaa"}}"

                $.support.cors = true;

                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    data: param,
                    dataType: "json",
                    processData: false,
                    crossDomain: true,
                    url: "http://localhost:59291/Person/POST/PersonPost",
                    success: function (data) {
                        alert("Post erfolgreich: ");

                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert("Fehler Post: Status " + xhr.status + " AntwortText " + xhr.responseText);
                    }
                });

有什么问题?为什么我在 insertPerson 方法中的参数 per 始终为空。

4

4 回答 4

2

对不起我的英语,这对我有用:

var LstPerson = new Array();
var person = {};

person.Id = 1
person.name = 'abc'

LstPerson.push(person)

var param = JSON.stringify(LstPerson); 

仅从 JS 发送 [{"id": "1", "name": "abc"}] 和 WCF REST 定义:

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, 
        RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)]
public Person InsertPerson(List<Person> per)
于 2013-03-22T16:32:45.247 回答
1

这不起作用的原因是因为DataMembers 是idandname而不是Idand Name。您需要修改以下代码:

person.Id = "abc123";
person.Name = "aaaa";
var per = {};
per.per = person;

person.id = "abc123";
person.name = "aaaa";
var per = {};
per.per = person;
于 2013-03-22T14:24:16.123 回答
0

您的网站违反了同源政策

这是规避同源政策的方法

您将crossDomain设置为true,但这仅与 jsonp 兼容,请阅读此

于 2013-03-22T14:20:27.303 回答
0

试试这个:

var person = {};
person.id = "1";
person.name = "abc";
var param = JSON.stringify(person);

原因之一是您收到的请求对象为 null,因为该方法需要一个 Person 类型的对象。根据您对 Person 的定义,JSON 中的 this 如下所示。

{"id": "1", "name": "abc"} 

这是因为没有像 per inside Person 这样的东西。

Person person = New Person("1", "abc");
person.per //There is nothing defined as per inside person.
于 2013-03-22T15:00:15.793 回答