[{"id":1612870980,"tags":[{"13575":"眼镜","weight":"2298"},{"8291":"社会化媒体","weight":"2093"},{"292":"互联网","weight":"326003"}]}
]获得了这个JSON字符,在tags里面,有个列名 为可变的数值。怎么序列化列呢?
下面是我写的映射列:
[DataContract]
public class UserTags
{
[DataMember(Name = "id")]
public string Id { get; set; } [DataMember(Name = "tags")]
public List<Tags> TagsInfo { get; set; } }
[DataContract]
public class Tags
{
//??这里怎么办呢
public string TagName { get; set; }
[DataMember(Name = "weight")]
public string TagId { get; set; }
}
你这里把概念给说反了,完全是误导别人。那不叫做“序列化”,那叫做“反序列化”。反序列化时候,你首先要识别出类型,才能调用反序列化方法(因为反序列方法需要用Type参数作为输入)。那么你首先要写一个从散列的json中(可以首先把json字符串反序列化为离散的JsonObject对象)识别类型的函数,得到Type,才能再次反序列化为最终的强类型对象。
所以 我想问下,这个列名可变的对象怎么定义出来的呢,可以解析Josn的数据。 有什么方法?
]
如这个JSON字符串,我是用DataContractJsonSerializer 来将Json字符串转化为对象,这应该怎么来做呢??
public string title;
public Shape[] shapes;
}abstract class Shape{
public Color color;
}class polyline: Shape
{
public point[] Points;
}class polygon: Shape
{
........
假设此矢量图上共有15中图形,那么你要从这1万个图形分别反序列化为15种图形,它们都是属性 shapes 中的一个元素,但是类型不同!不能识别类型,你就无法反序列化出各个Shape来,也就不可能反序列化出shapes属性。
根本不可能简单地调用一句 DataContractJsonSerializer。你需要先将json字符串反序列化为JsonObject元数据,然后遍历tags中的数组(它可能定义为JsonArray类型的)中每一个单元,将每一个单元单独识别出类型并单独调用 DataContractJsonSerializer。我不知道.net自身使用什么json序列化方法将json字符串反序列化。实际上即使是silverlight也已经支持JsonObject来灵活地反序列化json字符串(参考msdn)。因此我猜桌面版的.net framework应该有类似的更强的功能或者更强的功能才对。
自从使用Json.NET,在处理json方面我就不使用.net framework内置的类库了。所以不太清楚 DataContractJsonSerializer 或者类似的 .net framework 类库功能。