2009-08-14 5 views
3

Ich habe eine Silverlight-Anwendung, die auf eine Ashx ruft aus, die in derselben Anwendung wie die Silverlight-Steuerelement gehostet wird.Silverlight Zugriff ein Ashx JSON-Antwort

Die Ashx tut die folgende (abgespeckte):

// 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(); 

Jetzt ist der Teil Ich habe Probleme mit dem, was mit dem Ashx auf meinem Silverlight-Steuerelement zu tun.

Ich suche die Ashx und dann ordnen Sie das JSON Ergebnis in meine internen Silverlight Objekte zu nennen. Scheint wie eine ziemlich einfache Aufgabe, aber ich bin nicht sicher, wie man auf den Aschx zugreift oder sich mit der Antwort darauf befasst. Da Silverlight eine abgespeckte Version von .NET hat, wirft es mich aus.

Irgendwelche Hilfe/Vorschläge?

Verwenden von Silverlight 3, ASP.NET 3.5.

Antwort

0

Danke für die Antwort Jon. Ihre Links haben mir geholfen, es herauszufinden, und ich dachte, ich sollte den Code, den ich in dieser Frage verwendet habe, für andere, die in Zukunft auf diese Frage stoßen, einfügen.

Zwei Möglichkeiten, den Json zu behandeln. Für beide Methoden müssen Sie einen Handler einrichten, um die Json-Daten zu erhalten.

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

Sie brauchen dann den Event-Handler downloader_OpenReadCompleted oben angegebenen mit dem Code zu implementieren, um die Json zu handhaben. In beiden Fällen sollte der Code unten in einer using-Anweisung gewickelt werden:

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

erste Weg, um die JSON-Daten zu handhaben, die Teil des Silverlight-Framework ist ein Verweis auf System.Json hinzuzufügen.

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

Die andere Art und Weise, die mit oder ohne Silverlight möglich ist:

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

Beide Methoden am Ende mir eine Liste meiner Objekte bekommen, die ich dann, wie ich es sehen können.

Danke für die Hilfe Jon!

Verwandte Themen