2009-08-14 8 views
3

J'ai une application Silverlight qui appelle à un ashx qui est hébergé dans la même application que le contrôle Silverlight.Silverlight accéder à une réponse ashson JSON

Le ashx effectue les opérations suivantes (dépouillée):

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

Maintenant, la partie que j'ai des problèmes avec est ce qu'il faut faire avec le ashx sur mon contrôle Silverlight. Je cherche à appeler l'ashx et ensuite mapper le résultat JSON dans mes objets silverlight internes. Cela semble être une tâche assez simple, mais je ne suis pas sûr de savoir comment accéder à l'ashx ou gérer la réponse de celui-ci. Depuis Silverlight a une version dépouillée de .NET il me lance pour off.

Une aide/des suggestions? Utilisation de Silverlight 3, ASP.NET 3.5. Utilisez System.Json pour charger la chaîne dans un JsonArray.

Répondre

0

Merci pour la réponse Jon. Vos liens m'ont aidé à le comprendre et j'ai pensé que je devrais inclure le code que j'ai utilisé dans cette question pour d'autres qui rencontreront cette question à l'avenir.

Deux manières de manipuler le Json. Pour les deux méthodes, vous devez configurer un gestionnaire pour obtenir les données 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); 

Vous devez ensuite mettre en œuvre le gestionnaire d'événements downloader_OpenReadCompleted spécifié ci-dessus avec le code pour gérer l'JSON. Dans les deux cas, le code ci-dessous doit être enveloppé dans une déclaration à l'aide:

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

Première façon de gérer les données JSON qui fait partie du cadre Silverlight est d'ajouter une référence à 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); 
} 

L'autre manière est possible avec ou sans Silverlight est:

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

Les deux méthodes finissent par me faire une liste de mes objets que je peux alors utiliser comme je l'entends.

Merci pour l'aide Jon!

Questions connexes