Получение данных внутри веб-сервиса C # из строки Jsonified - PullRequest
0 голосов
/ 17 января 2011

В моем JS я использую функции $ ajax Jquery для вызова веб-сервиса и отправки ему jsonified данных.Данные имеют следующий формат:

var countries = {

   "1A": {
        id: "1A",
        name: "Andorra"        
    },
    "2B": {
        id: 2B
        name: "Belgium"       
    },

    ..etc
};

var jsonData = JSON.stringify({ data: data });

// затем вызывается $ ajax и выполняется вызов веб-службы c #


На стороне c # веб-службанеобходимо распаковать эти данные, в настоящее время они имеют тип данных string [] [].Как мне преобразовать его в формат, чтобы я мог ссылаться на такие свойства, как

.id и .name?Предполагая, что у меня есть класс с именем Sample с этими свойствами?Спасибо!

РЕДАКТИРОВАТЬ:

Вот мой код JS:

var jsonData = JSON.stringify(countries);

     $.ajax({
         type: 'POST',
         url: 'http://localhost/MyService.asmx/Foo',
         contentType: 'application/json; charset=utf-8',
         data: jsonData,
         success: function (msg) {                 
             alert(msg.d);
         },
         error: function (xhr, status) {
              switch (status) {
                 case 404:
                     alert('File not found');
                     break;
                 case 500:
                     alert('Server error');
                     break;
                 case 0:
                     alert('Request aborted');
                     break;
                 default:
                     alert('Unknown error ' + status);
             } 
         }
     });

внутри веб-службы C # У меня есть:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Collections;
using System.IO;
using System.Web.Script.Services;

[WebMethod]
[ScriptMethod]
public string Foo(IDictionary<string, Country> countries)   
{

    return "success";
}

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Я не знаю, о чем string[][] вы говорите и откуда это берется, но лучше работать с сильными типами.Поэтому определите пользовательский тип, который будет моделировать ваши данные:

public class Country
{
    public string Id { get; set; }
    public string Name { get; set; }
}

, а затем попросите веб-метод взять словарь:

[WebMethod]
[ScriptMethod]
public string Foo(IDictionary<string, Country> countries)
{
    // Here you will have countries["1A"].Name = "Andorra" and 
    // countries["2B"].Name = Belgi
    ...    
    return "success";
}

, а затем просто вызвать этот метод (см. UPDATEдля правильных данных):

var data = {
   "1A": {
        id: "1A",
        name: "Andorra"        
    },
    "2B": {
        id: 2B
        name: "Belgi"       
    }
};

$.ajax({
    type: 'POST',
    url: '/myservice.asmx/Foo',
    contentType: 'application/json; charset=utf-8',
    data: { JSON.stringify(data) },
    success: function(msg) {
        alert(msg.d);
    }
});

ОБНОВЛЕНИЕ:

На самом деле запрос долженбыть отформатирован так:

var data = {
    countries: {
        "1A": {
            id: "1A",
            name: "Andorra"
        },
        "2B": {
            id: "2B",
            name: "Belgium"
        }
    }
};
0 голосов
/ 17 января 2011

Вы пробовали JavaScriptSerializer ?Как вы сказали, предполагая, что у вас есть класс с этими свойствами, он может / может десериализовать строку JSON для этого типа.

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