2017-01-09 3 views
0

Пожалуйста, смотрите ниже AJAX:JSON не анализируется в пользовательский объект

<script type="text/javascript" src="Javascript/json2.js"></script> 
    <script type="text/javascript" src="Javascript/jquery-1.11.1.min.js"></script> 
    <script type = "text/javascript"> 
     function GetData() { 
      $.ajax({ 
       type: "POST", 
       url: "JSONExample.aspx/GetPerson", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: OnSuccess(), 
      //async: false, 
      failure: function (response) { 
       alert('there was an error counting possibles') 
      } 
     }); 

     function OnSuccess() { 
      return function (response) { 
       alert(response); 
       window.location.href("JSONExample.aspx?id=" + response); 
      } 
     } 
     } 
     GetData() 
    </script> 

и код на стороне сервера ниже:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Services; 
using Newtonsoft.Json; 

namespace SerializeAndDeserializeJSON 
{ 
    //[Serializable] 
    public class Person 
    { 
     public String Name; 
     public int Age; 
    } 

    public partial class JSONExample : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if ((Request.QueryString["id"]== null)==false) 
      { 
       var json = Request.QueryString["id"]; 
       var person = JsonConvert.DeserializeObject<Person>(json); //person is null 
      } 
     } 

     [System.Web.Services.WebMethod] 
     public static Person GetPerson() 
     { 
      Person p1 = new Person(); 
      p1.Name = "Ian"; 
      p1.Age=35; 
      return p1; 
     } 
    } 
} 

На странице загрузки значения объекта Person следующим после страницы нагрузка:

имя: нулевой Возраст: 0

название должно б e Ian и Age должны быть 35. Что я делаю неправильно?

+0

Проверьте ваш отзыв null, change dataType to json –

+0

Является ли объект Json недействительным внутри функции OnSuccess? –

ответ

2

Что я делаю неправильно?

Попробуйте установить DATATYPE в json вместо text:

dataType: 'json' 

А затем отправить объектов JavaScript в виде строки JSON в параметре id:

window.location.href("JSONExample.aspx?id=" + encodeURIComponent(JSON.stringify(response.d))); 

Обратите внимание, что мы используем response.d здесь, поскольку ASP.NET WebMethods сериализует ответы с использованием этого специального свойства.

Также вы, вероятно, хотите использовать общие свойства вместо полей для вашей модели:

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

Некоторые структуры задыхаться на полях.

+0

Спасибо. Однако это вызывает ошибку на стороне сервера, которая гласит: «Невозможно выполнить преобразование или преобразование из System.String в SerializeAndDeserializeJSON.Person». – w0051977

+0

Каково значение параметра 'id', который вы получаете на сервере? –

+0

\ "{\\\" d \\\ ": {\\\" __ type \\\ ": \\\" SerializeAndDeserializeJSON.Person \\\ ", \\\" Имя \\\ ": \\\ «Ian \\\», \\\ «Age \\\»: 35}} \ – w0051977