日期:2014-05-17  浏览次数:20460 次

json 序列化问题?当列名为可变数值时,如果序列化?

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

------解决方案--------------------
这种问题应该在拼JSON的时候不该出现

你可以在拼JSON的时候避免或者得到JSON的时候处理一下,换成后台可正常序列化的
------解决方案--------------------
你连Tags类定义都写不出来,又何必画蛇添足地去纠结什么“列名可变的对象的json序列化”问题呢?

你先写出一个“列名可变”的对象定义出来。写不出来这个,就别谈它的序列化问题。
------解决方案--------------------
探讨
获得了这个JSON字符,在tags里面,有个列名 为可变的数值。怎么序列化列呢?

------解决方案--------------------
哪有什么“列名可变的对象”?你需要首先识别类型,然后反序列为不同类型的对象!

而假设想让某个对象的属性/字段的命名为数字,则根本不可能。
------解决方案--------------------
举个例子吧。假设你从“绘图数据库”中检索到1个矢量图,它包括1万个图形对象,它的原型也许是这样的
C# code
class box{
   public string title;
   public Shape[] shapes;
}

abstract class Shape{
   public Color color;
}

class polyline: Shape
{
    public point[] Points;
}

class polygon: Shape
{
........

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

------解决方案--------------------
在.net中已经包括了ExpandoObject,我想如果它不支持很灵活的json序列化/反序列化,而仅仅有个简单的 DataContractJsonSerializer,实在说不过去。

假设.net framework的json处理机制很弱智,你可以考虑使用json.net,而再也不使用.net类库里的功能。