2009-11-05 4 views

Répondre

1

Aucun silverlight 3 ne peut sérialiser un type anonyme. Le seul sérialiseur JSON que Silverlight possède est le DataContractJsonSerializer. Cependant, cela nécessite que les types soient décorés avec DataContractAttribute et que les membres soient décorés avec DataMemberAttribute, ce qui ne sera pas le cas pour les types anonymes.

Toutefois, si votre but est d'interroger certaines données existantes et de générer une sortie de chaîne JSON, vous pouvez envisager d'utiliser des classes trouvées dans l'espace de noms System.Json. Voici un exemple: -

/// <summary> 
/// Helper methods to reduce code needed in constructing JSON items 
/// </summary> 
public static class JsonHelper 
{  
    public static KeyValuePair<string, JsonValue> CreateProperty(string name, string value) 
    { 
     return new KeyValuePair<string, JsonValue>(name, new JsonPrimitive(value)); 
    } 
    public static KeyValuePair<string, JsonValue> CreateProperty(string name, int value) 
    { 
     return new KeyValuePair<string, JsonValue>(name, new JsonPrimitive(value)); 
    } 
    // Replicate above for each constructor of JsonPrimitive 
    public static KeyValuePair<string, JsonValue> CreateProperty(string name, JsonValue value) 
    { 
     return new KeyValuePair<string, JsonValue>(name, value); 
    } 
} 

ci-dessus est tout simplement une classe statique d'aide afin que le code dans la requête LINQ suivante ne soit pas à poilue. Le DataProvider génère simplement des données de test qui dans ce cas est une liste d'objets qui ont une propriété Name. Cet exemple noddy génère simplement une liste d'objets qui ont une propriété name et une propriété count qui contient le nombre de caractères dans la propriété name.

var list = from item in DataProvider.DataItems() 
     select (JsonValue)(new JsonObject(
      JsonHelper.CreateProperty("name", item.Name), 
      JsonHelper.CreateProperty("count", item.Name.Length) 
      )); 

var result = (new JsonArray(list)).ToString(); 
+0

Eh bien, je pensais que cela pourrait être le cas. Dommage. J'espère qu'ils ramèneront JavaScriptSerializer dans Silverlight, bientôt. –

-1

Voulez-vous dire anonyme comme dans var? Cela ne peut être sérialisé par quoi que ce soit.

+0

Je veux dire anonyme comme dans:

 new { MyProperty = "Something", MyLocation = "Somewhere" } 
et vous pouvez sérialisation à l'aide JavaScriptSerializer dans des conditions normales d'applications .Net, mais il ne marche pas semble être disponible en silverlight. Dommage. Pour ce que cela vaut il n'y a aucune raison que les types anonymes ne puissent pas être sérialisés, c'est désérialiser c'est le problème. –

Questions connexes