当前位置: 代码迷 >> ASP.NET >> json 序列化有关问题?当列名为可变数值时,如果序列化
  详细解决方案

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

热度:5274   发布时间:2013-02-25 00:00:00.0
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类库里的功能。
  相关解决方案