WebMethod returns JSON, but the obj response in my $ .ajax () callback is just a string

Here is my Serializing family class:

public class JsonBuilder { private StringBuilder json; public JsonBuilder() { json = new StringBuilder(); } public JsonBuilder AddObjectType(string className) { json.Append("\"" + className + "\": {"); return this; } public JsonBuilder Add(string key, string val) { json.AppendFormat("\"{0}\":\"{1}\",", key, val); return this; } public JsonBuilder Add(string key, int val) { json.AppendFormat("\"{0}\":{1},", key, val); return this; } public string Serialize() { return json.ToString().TrimEnd(new char[] { ',' }) + "}"; } } 

Here is the web method

 [WebMethod] public static string GetPersonInfo(string pFirstName, string pLastName) { var json = new JsonBuilder().AddObjectType("Person"); json.Add("FirstName", "Psuedo" + pFirstName).Add("LastName", "Tally-" + pLastName); json.Add("Address", "5035 Macleay Rd SE").Add("City", "Salem"); json.Add("State", "Oregon").Add("ZipCode", "97317").Add("Age", 99); return json.Serialize(); } 

Ajax Client Call

  $.ajax( { type: "POST", url: "Default.aspx/GetPersonInfo", data: JSON.stringify(name), contentType: "application/json; charset=uft-8", dataType: "json", success: function (rsp) { SetPerson(rsp); }, error: function (rsp) { alert(rsp); } }); 

And finally, my callback method

 function SetPerson(rsp) { $('#fName').val(rsp.d.FirstName); $('#lName').val(rsp.d.LastName); $('#address').val(rsp.d.Address); $('#city').val(rsp.d.City); $('#state').val(rsp.d.State); $('#zip').val(rsp.d.ZipCode); SetPerson(rsp.d.Age); } 

rsp.d is a string containing all the properties ... the properties themselves are undefined. I know that I am missing something simple here.

The returned string from the server

 "Person": {"FirstName":"Psuedomatt","LastName":"Tally-cox","Address":"5035 Macleay Rd SE","City":"Salem","State":"Oregon","ZipCode":"97317","Age":99} 
+8
jquery ajax
source share
1 answer

You do not have to manually serialize the return value; ASP.NET will do it for you. Try something like this:

 [WebMethod] public static Person GetPersonInfo(string pFirstName, string pLastName) { // Assuming you have a server-side Person class. Person p = new Person(); p.FirstName = "Pseudo" + pFirstName; p.LastName = "Tally-" + pLastName; p.Address = "5035 Macleay Rd SE"; p.City = "Salem"; p.State = "Oregon"; p.ZipCode = "97317"; // ASP.NET will automatically JSON serialize this, if you call it with // the correct client-side form (which you appear to be doing). return p; } 

If you need to return something more dynamic, as it seems, for example, your example, you can use an anonymous type:

 [WebMethod] public static object GetPersonInfo(string pFirstName, string pLastName) { // ASP.NET will automatically JSON serialize this as well. return new { FirstName = "Pseudo" + pFirstName, LastName = "Tally-" + pLastName, Address = "5035 Macleay Rd SE", City = "Salem", State = "Oregon", ZipCode = "97317" } } 
+16
source share

All Articles