title: WebMethod returning JSON but the response obj in my $.ajax() callback is only a string
body: <p>Here is my home-made Serializing class:</p>
  
  <pre><code>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[] { ',' }) + "}";
      }
  }
  </code></pre>
  
  <p>Here is the Web Method</p>
  
  <pre><code>[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();
  }
  </code></pre>
  
  <p>The Ajax call client-side</p>
  
  <pre><code> $.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);
         }
     });
  </code></pre>
  
  <p>And finally, my callback method</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>rsp.d is a string that contains all the properties ... the properties themselves are undefined. I know I am missing something simple here.</p>
  
  <p>Returned string from server</p>
  
  <pre><code>"Person": {"FirstName":"Psuedomatt","LastName":"Tally-cox","Address":"5035 Macleay Rd SE","City":"Salem","State":"Oregon","ZipCode":"97317","Age":99}
  </code></pre>