2009-08-14 14 views
3

Silverlightコントロールと同じアプリケーションでホストされているashxを呼び出すSilverlightアプリケーションがあります。Silverlightがashx JSON応答にアクセス

ASHXは(ストリップダウン)以下のん:

// Basic object 
class SomeObject 
{ 
    int ID { get; set; } 
    string Description { get; set; } 
    double Value { get; set; } 
} 


// ASHX details 
DataLayer dl = GetDataLayer(); 
List<SomeObject> lst = dl.ListObjects(); 
string result = ""; 
if (lst != null) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    result = serializer.Serialize(lst); 
} 
context.Response.ContentType = "application/json"; 
context.Response.Write(result); 
context.Response.End(); 

さて、私はとのトラブルを抱えています部分は私のSilverlightコントロールにASHXをどうするかです。

私はashxを呼び出してJSONの結果を内部のSilverlightオブジェクトにマップしたいと考えています。かなりシンプルな作業のようですが、私はashxにアクセスする方法やその回答を処理する方法がわかりません。 Silverlightには.NETのバージョンが取り除かれているので、それは私を捨ててしまいます。

ヘルプ/提案はありますか?

Silverlight 3、ASP.NET 3.5を使用しています。

答えて

1

System.Jsonを使用して、文字列をJsonArrayにロードします。 JsonValue.Load()は応答ストリームをとり、そこからJsonArrayを読み込むことができます。繰り返し実行するか、LINQを使用して値を問い合わせることができます。

リンク:返信ジョンのための

0

感謝。あなたのリンクは私がそれを理解するのを助け、私はこの質問に使用したコードを将来この質問に出くわす他の人に含めるべきだと思った。

Jsonを処理する2つの方法。どちらのメソッドでも、Jsonデータを取得するためにハンドラを設定する必要があります。

// This gets the URL to call to get the Json data 
Uri uri = GetSomeUrl(); 
WebClient downloader = new WebClient(); 
downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted); 
downloader.OpenReadAsync(uri); 

その後、JSONを処理するコードで上記の指定されたイベントハンドラdownloader_OpenReadCompletedを実装する必要があります。両方の場合に以下のコードを使用して、ステートメントに包まれるべきである:シルバーフレームワークの一部であるJSONデータを処理する

using (System.IO.Stream strResult = e.Result) 
{ 
} 

最初の方法であるSystem.Jsonへの参照を追加します。

JsonArray jsonArray = (JsonArray)JsonArray.Load(e.Result); 
List<SomeObject> lst = new List<SomeObject>(); 
foreach (System.Json.JsonObject obj in jsonArray) 
{ 
    SomeObject obj = new SomeObject(); 
    obj.ID = int.Parse(obj["ID"].ToString(); 
    obj.Description = obj["Description"].ToString(); 
    obj.Value = double.Parse(obj["Value"].ToString()); 
    lst.Add(obj); 
} 

シルバーの有無にかかわらず可能である他の方法は次のとおりです。

System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = 
    new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<SomeObject>)); 
List<SomeObject> lst = (List<SomeObject>)(serializer.ReadObject(strResult)); 

どちらの方法でも、私が合うように、私はその後、使用することができ、私のオブジェクトの一覧を取得してしまいます。

助けてくれてありがとうJon!