读书人

json 序列化有关问题?当列名为可变数

发布时间: 2012-09-15 19:09:28 作者: rapoo

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类库里的功能。

读书人网 >asp.net

热点推荐