从Jsonified字符串获取C#Web服务中的数据

时间:2011-01-17 18:28:01

标签: c# jquery web-services json

在我的JS中,我使用Jquery的$ ajax函数来调用Web服务并将jsonified数据发送给它。数据采用以下格式:

var countries = {

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

    ..etc
};

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

//然后调用$ ajax并调用c#web服务


在c#端,Web服务需要解压缩此数据,目前它以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#web服务中我有:

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 个答案:

答案 0 :(得分:2)

我不知道你在说什么string[][],它来自哪里,但最好是使用强类型。因此,定义一个将为数据建模的自定义类型:

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

然后让web方法使用字典:

[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"
        }
    }
};

答案 1 :(得分:0)

你试过JavaScriptSerializer吗?正如您所说,假设您有一个具有这些属性的类,它应该/可能{/ 3}} JSON字符串为该类型。