Что означает .d в JSON? - PullRequest
       60

Что означает .d в JSON?

45 голосов
/ 06 мая 2009

У меня есть веб-метод .NET, который я вызвал из jQuery. Метод возвращает некоторую HTML-разметку, которую я отображаю в элементе DIV.

Получив ответ, я использую

$("#div").html(result.d);

Мой вопрос: что делает .d? Мне не нравится использовать код, который я не совсем понимаю? Могу ли я получить тот же результат, используя Eval?

Ответы [ 8 ]

23 голосов
/ 06 мая 2009

Вы имеете в виду службы данных ADO.NET?

Я помню, как слышал презентацию о том, что JSON возвращает это, и я думаю, что это просто оболочка для , гарантирующая, что полезная нагрузка является объектом JSON , а не массивом (что в случае возврата нескольких сущностей).

Почему именно "д"? Кажется, я помню, как они говорили что-то вроде «ну, это должно быть что-то».

8 голосов
/ 05 июня 2014

На основе этого руководства: Веб-служба JSON и jQuery с Visual Studio 2008

Веб-метод возвращает Продукт, сериализованный в формате JSON. Поскольку тип JSON отсутствует, возвращается значение String в формате JSON.

На стороне клиента вызов ajax возвращает JSON.

Результат выглядит как {d: 'returned-string-with-JSON-format'}

Точнее что-то вроде: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Обратите внимание, что 'returned-string-with-JSON-format' является строкой, а не объектом JSON, поэтому вы не можете сделать result.d.ID.

Вместо этого вам необходимо преобразовать его в объект JSON с помощью JSON.parse(result.d) или eval(result.d)

В конце, что вы действительно хотите, это сделать:

result = JSON.parse(result.d)

UPDATE Также рассмотрим эту демонстрацию, где я использую JSON в строковом формате и преобразую его в объект JSON:

enter image description here

1 голос
/ 05 июня 2015

ASPX код здесь:

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <script type="text/javascript">


        function GetData()
        {
            alert("I am called");
                $.ajax({
                    type: "POST",
                    url: "Contact.aspx/GetProducts",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {


                       var data = JSON.parse(result.d)
                       alert(data.Id);

                    },
                    error:function(ex)
                    {
                        alert("Test");
                    }
                });
        }
    </script>

     <asp:TextBox ID="txtName" runat="server"></asp:TextBox>

    <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="GetData();" />
</asp:Content>

C # код здесь:

public partial class Contact : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindList();
            }
            int[] arr1 = new int[] { 1, 2 };
            ListBox1.SelectedValue = "1";
            ListBox1.SelectedValue = "4";


        }

        void BindList()
        {

            List<Product> lst = new List<Product>()
            {
                new Product{Id=1,Name="Photo"},
                new Product{Id=2,Name="Photo"},
                new Product{Id=3,Name="Photo"},
                new Product{Id=4,Name="Photo"}
            };
            ListBox1.DataSource = lst;
            ListBox1.DataTextField = "Name";
            ListBox1.DataValueField = "Id";
            ListBox1.DataBind();
        }


        [WebMethod]
        public static string GetProducts()
        {
            // instantiate a serializer
            JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

            //optional: you can create your own custom converter
           // TheSerializer.RegisterConverters(new JavaScriptConverter[] { new MyCustomJson() });

            //var products = context.GetProducts().ToList();
            Product products = new Product() { Id = 1, Name = "Testing Services" };
            var TheJson = TheSerializer.Serialize(products);

            return TheJson;
        }

    }
1 голос
/ 29 мая 2014

может быть очень полезной ссылкой для тех, кто хочет действительно выучить с нуля пример о классе-оболочке, где детали одного класса никогда не могут быть переданы другому классу, но могут быть косвенно доступны через различные методы http://www.c -sharpcorner.com / Блоги / 12038 / обертка класса-в-C-Sharp.aspx

0 голосов
/ 05 июня 2015

Очень ясно, что $ ("# div"). Html (result.d); в вашем коде

«result» - это объект, а d - свойство «result».

Позвольте объяснить,

если вы создаете такой объект,

var result{"id": "number", "d": "day"};

если мы обращаемся к свойству результата, то используя jquery

$("#div").html(result.d);

поэтому мы получаем результат в html

<html>day</html>
0 голосов
/ 06 мая 2009

Как уже отмечали другие, он возвращает "d" член "result" объекта.
Если вы хотите иметь "d" в переменной, вы можете использовать это:

var property = "d";
var value = result[property];
0 голосов
/ 06 мая 2009

d является частью результата, возвращаемого вашим .NET-кодом. Если вы посмотрите на этот код, вы увидите переменную с именем d. Если он генерируется из сериализованных классов, то он, вероятно, отправляет члена этого класса с именем d.

0 голосов
/ 06 мая 2009

Возвращает значение поля с именем 'd' в объекте 'result'.

Этот вопрос показывает пример того, как может выглядеть JSON, обратите внимание на поле d:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...