2011-01-17 7 views
0

私のJSでは、Jqueryの$ ajax関数を使用してWebサービスを呼び出し、jsonifiedデータを送信します。データのフォーマットは次のとおりです。C#Webサービス内のデータをJsonified文字列から取得する

var countries = { 

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

    ..etc 
}; 

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

//その後、$アヤックスが呼び出され、それがWebサービスがこれを解凍する必要があるのC#側ではC#のWebサービス


への呼び出しを行っていますデータは、現在、string [] []データ型として取り込まれています。どのようにフォーマットに変換すればいいのですか?

.idと.nameのようなプロパティを参照できますか?これらのプロパティを持つSampleというクラスがあるとします。 ありがとう!

EDIT:

ここ

である私のJSコード:C#のWebサービスの内部

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); 
      } 
     } 
    }); 

私が持っている:

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

あなたは何を話しているのか分からず、どこから来たのですが、強いタイプで作業する方が良いです。だからあなたのデータをモデル化するカスタムタイプ定義:

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); 
    } 
}); 

UPDATE:

実際の要求は次のようにフォーマットする必要があります。

var data = { 
    countries: { 
     "1A": { 
      id: "1A", 
      name: "Andorra" 
     }, 
     "2B": { 
      id: "2B", 
      name: "Belgium" 
     } 
    } 
}; 
+0

感謝:)私はまた、このWebサービスに他のデータを送信しています。現在、私のWebサービスは ます。public void Fooの(文字列[] []のデータ) { // 何でも} dataパラメータ内 は、データが[0]の資格情報が含まれていますが、データが[1]が含ま[WebMethod属性]のようになります。オブジェクトの実際の配列.... – sarsnake

+0

@gnomixa、他のデータは?すべてが強力なタイプで表現できます。したがって、このディクショナリをプロパティとして含み、別のプロパティとして渡す他のデータを含む基本オブジェクトを定義します。この 'string [] []'を取り除くだけです。それはあなたのウェブメソッドを維持することができなくなります。 –

+0

は、このシナリオを考えればあなたのやり方は変わりませんか? – sarsnake

0

あなたはJavaScriptSerializerを試したことがありますか?あなたが言ったように、これらのプロパティを持つクラスを持っていると仮定すると、deserializeにそのタイプのJSON文字列を渡すことができます。