3

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

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 にアクセスする方法や、ashx からの応答を処理する方法がわかりません。Silverlight には .NET の簡素化されたバージョンが含まれているため、私はうんざりしています。

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

Silverlight 3、ASP.NET 3.5 を使用。

4

2 に答える 2

1

System.Json を使用して、文字列を JsonArray に読み込みます。JsonValue.Load() は応答ストリームを受け取り、JsonArray に値を入力できます。そこから、繰り返し処理するか、LINQ を使用して値をクエリできます。

リンク:

于 2009-08-15T04:42:19.163 に答える
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);

downloader_OpenReadCompleted次に、Json を処理するコードを使用して、上記で指定したイベント ハンドラーを実装する必要があります。どちらの場合も、以下のコードは us​​ing ステートメントでラップする必要があります。

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

Silverlight フレームワークの一部である Json データを処理する最初の方法は、への参照を追加すること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);
}

Silverlight の有無にかかわらず可能なもう 1 つの方法は次のとおりです。

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

どちらの方法でも、最終的にオブジェクトのリストを取得し、それを必要に応じて使用できます。

助けてくれてありがとうジョン!

于 2009-08-17T16:30:09.293 に答える