2009-11-05 61 views

回答

1

沒有Silverlight 3中不能序列化一個匿名類型。 Silverlight唯一的JSON序列化程序是DataContractJsonSerializer。然而,這需要的類型與DataContractAttribute和成員與DataMemberAttribute加以裝飾,這將不會是匿名類型的真正的裝飾。

但是,如果你的目的是爲了查詢一些現有數據,並生成一個JSON字符串輸出,那麼你可以考慮使用在System.Json命名空間中的類。這裏有一個例子: -

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

以上僅僅是一個輔助靜態類,這樣在下面的LINQ查詢代碼沒有得到毛。該DataProvider只是產生一些測試數據,在這種情況下,是有一個Name屬性的對象的列表。這諾迪例如簡單地生成有name財產,包含name屬性的字符個數一個count屬性的對象的列表。

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

哦,我想這可能是這樣的。太糟糕了。我希望他們能很快帶回Silverlight中的JavaScriptSerializer。 – 2009-11-05 15:06:37

-1

你的意思是匿名在var?這不能被任何東西序列化。

+0

我的意思是匿名的,如:

 new { MyProperty = "Something", MyLocation = "Somewhere" } 
,您可以在正常的.Net應用程序中使用JavaScriptSerializer序列化,但它不似乎是在Silverlight提供。太糟糕了。對於它的價值是什麼沒有理由匿名類型不能序列化,它是反序列化他們多數民衆贊成在這個問題。 – 2009-11-05 15:00:51