[{"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; }
    }

解决方案 »

  1.   

    这种问题应该在拼JSON的时候不该出现你可以在拼JSON的时候避免或者得到JSON的时候处理一下,换成后台可正常序列化的
      

  2.   

    你连Tags类定义都写不出来,又何必画蛇添足地去纠结什么“列名可变的对象的json序列化”问题呢?你先写出一个“列名可变”的对象定义出来。写不出来这个,就别谈它的序列化问题。
      

  3.   


    你这里把概念给说反了,完全是误导别人。那不叫做“序列化”,那叫做“反序列化”。反序列化时候,你首先要识别出类型,才能调用反序列化方法(因为反序列方法需要用Type参数作为输入)。那么你首先要写一个从散列的json中(可以首先把json字符串反序列化为离散的JsonObject对象)识别类型的函数,得到Type,才能再次反序列化为最终的强类型对象。
      

  4.   


    所以 我想问下,这个列名可变的对象怎么定义出来的呢,可以解析Josn的数据。 有什么方法?
      

  5.   

    [{"id":1612870980,"tags":[{"13575":"眼镜","weight":"2298"},{"8291":"社会化媒体","weight":"2093"},{"292":"互联网","weight":"326003"}]}
    ]
    如这个JSON字符串,我是用DataContractJsonSerializer 来将Json字符串转化为对象,这应该怎么来做呢??
      

  6.   

    举个例子吧。假设你从“绘图数据库”中检索到1个矢量图,它包括1万个图形对象,它的原型也许是这样的class box{
       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属性。
      

  7.   


    根本不可能简单地调用一句 DataContractJsonSerializer。你需要先将json字符串反序列化为JsonObject元数据,然后遍历tags中的数组(它可能定义为JsonArray类型的)中每一个单元,将每一个单元单独识别出类型并单独调用 DataContractJsonSerializer。我不知道.net自身使用什么json序列化方法将json字符串反序列化。实际上即使是silverlight也已经支持JsonObject来灵活地反序列化json字符串(参考msdn)。因此我猜桌面版的.net framework应该有类似的更强的功能或者更强的功能才对。
     
    自从使用Json.NET,在处理json方面我就不使用.net framework内置的类库了。所以不太清楚 DataContractJsonSerializer 或者类似的 .net framework 类库功能。
      

  8.   

    在.net中已经包括了ExpandoObject,我想如果它不支持很灵活的json序列化/反序列化,而仅仅有个简单的 DataContractJsonSerializer,实在说不过去。假设.net framework的json处理机制很弱智,你可以考虑使用json.net,而再也不使用.net类库里的功能。