2010-12-06 6 views
2

クライアント側でJQueryを使用しているASP.NET Webフォームがあります。私は、オブジェクトのコレクションを構築してJSONに格納するユーザーインターフェイスを持っています。クライアント側の実装が完了したら、ユーザーがボタンをクリックしたときにその情報を処理する必要があります。このボタンをクリックすると、そのJSONコレクションをループしてエントリを検証する必要があります。私の問題は、私はそれをやる方法がわからないということです。ASP.NETとC#のサーバー側でJSONを操作する

// Client-Side Code 
var myCollection = { 
    "data": [ 
    ] 
}; 


// Server-Side Code 
protected void myButton_Click(object sender, EventArgs e) 
{ 
    // Parse JSON 
} 

コレクション内の各アイテムは、「データ」プロパティに格納されます。サーバーサイドでJSONコレクションをループするにはどうすればよいですか?隠しHTML要素にJSONデータを置くことを考えましたが、これは良いとは言えませんでしたし、良い方法を考えることができました。

は隠しフィールドに

答えて

1

どのようにサーバーに送信するかは、隠しフィールド、AJAX呼び出し、好きなものに依存します。そのオブジェクト

  • そのC#の表現にJSONから を行くために、コンバータの

    1. A C#のサーバ側の表現 :あなたは、サーバー上の文字列を持ってたら、2つのことが必要になります。

    例の「myCollection」はコレクションではなくオブジェクトなので、少し調整しましょう。だから私はそれをmyObjectと呼ぶでしょう。次に、「データ」は文字列の配列であると仮定します。それは何でもかまいませんが、私たちはそれを簡単に保ちます。

    var myObject = { 
        data: ["string1","string2"] 
    }; 
    

    我々はまた、あなたがDataContractJsonSerializerを使用していると仮定しますので、あなたは簡単に二つの異なる場合、スタイルをマッピングすることができます... JavaScriptが一般的にキャメルケースで、C#は、通常ProperCaseです。だから、C#で、これは次のようになります。

    [DataContract(Name="myObjectType")] 
    public class MyObjectType{ 
        [DataMember(Name="data")] 
        public string[] Data { get; set; } 
    } 
    

    今、あなたは、同じ構造の2つの表現、C#で1、JavaScriptで1つを持っています。

    MyObjectType myObject = Deserialize<MyObjectType>(incomingString); 
    
    :の最後の呼び出しで結果...

    public static T Deserialize<T>(string json) 
    { 
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) 
        { 
         DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); 
         return (T)serializer.ReadObject(ms); 
        } 
    } 
    

    :一方から他方へ変換するために、我々はこのように、内蔵のDataContractJsonSerializerを使用することができます

  • 0

    JSONをありがとうございデータは、サーバーにポストされるように、それを行うための有効な方法です。次に、System.Web.Script.Serialization.JavaScriptSerializerコンポーネントを使用して、データを辞書に逆シリアル化し、そのようにデータにアクセスできます。そのプロセスからhow配列データが100%出ないことを確認してください。 JSON.NETのような他のツールもJSONを解析できます。

    もう1つの方法は、Webサービスコールによるものですが、ページのライフサイクルを経ることはありません。

    HTH。

    関連する問題