Silverlight可以序列化匿名对象吗?

时间:2009-11-05 02:13:43

标签: c# silverlight json serialization

Silverlight 3可以序列化匿名对象吗?

2 个答案:

答案 0 :(得分: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属性的对象列表。这个noddy示例只生成一个对象列表,这些对象具有name属性和count属性,该属性包含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();

答案 1 :(得分:-1)

你的意思是var中的匿名吗?这不能被任何东西序列化。