首页新闻找找看学习计划

在C#中解析JSON数据

0
[待解决问题]

  由前台发给服务器的数据是JSON数据格式,那么在C#中有没有像java中的

JSONObject json= JSONObject.fromObject(string);类似的方法呢。我所说的不是C#中的反序列化方法。    
mcfer的主页 mcfer | 初学一级 | 园豆:144
提问于:2015-02-04 22:49
< >
分享
所有回答(4)
0

.....json.net

用过都说好!!

吴瑞祥 | 园豆:28729 (高人七级) | 2015-02-05 09:14
0

你这种用法能起到什么作用?我在C#里面没有见过你这种需求

刘宏玺 | 园豆:14004 (专家六级) | 2015-02-05 09:15

情况是这样的:

在前台表单中,通过

var data = $("#form1").serializeArray();
var str=JSON.stringify(data);获取到了表单对象的序列化字符串如

str='[{"name":"username","value":"555"},{"name":"password","value":"666"},{"name":"telephone","value":"7"}]'

那么我在后台怎么对这个字符串进行解析呢?

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2015-02-05 09:34

@mcfer: 反序列化

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2015-02-05 09:35

@刘宏玺: 

您的意思是我先定义一个类

class User

{

public string name;

public string value;

}

然后通过反序列化得到一个List<User>吗?再对这个List进行操作吗?

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2015-02-05 09:42

@mcfer: 对呢!就是这个意思了

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2015-02-05 09:43

@刘宏玺: 但是我觉得这样不是很好啊。

1、由于前台与服务器频繁交换数据,而且数据格式比较多,这就需要在后台定义比较多的类。

2、由前台发送的json数据不是我自己拼接的,而是通过

var data = $("#form1").serializeArray();
var str=JSON.stringify(data)方法获取的,如果表单数据比较多的话,就会导致name和value的键值对过多,并且反序列化产生的是一个List<User>,如果我要获取name=age的user的value值,就会比较困难?那么前台的Json格式数据一般是通过自己拼接字符串的形式得到的吗?

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2015-02-05 09:48

@mcfer: 你没救了。。。

支持(0) 反对(0) Launcher | 园豆:45040 (高人七级) | 2015-02-05 16:54

@mcfer: 如果你想很随意的定义表单的值就别用json了,用了反倒麻烦,直接Request["key"]这样取值好了,如果用json,就定义好表单的内容,然后和后台C#对应起来,这个弄成最全面的,包含所有的键,这样就不会出问题了

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2015-02-06 10:19
0

System.Web.Script.Serialization.JavaScriptSerializer 类即可解析 JSON,

默认解析出来是 System.Collections.Generic.IDictionary<string, object> 类型.

实现 System.Web.Script.Serialization.JavaScriptConverter 接口可以解析到自定义类型,

如果 常规的自定义类型 无法满足 属性不确定的需求,

可以使用 System.Dynamic.ExpandoObject 或者 继承 System.Dynamic.DynamicObject

可以继承 System.Dynamic.DynamicObject 的同时,实现 System.Collections.Generic.IDictionary<string, object>接口, 即可达到 属性动态添加, 动态访问, 甚至属性名 忽略大小写.

过于执著 | 园豆:339 (菜鸟二级) | 2015-02-06 09:52
0

可以用Newtonsoft.Json.Linq,把你的json字符串转成一个JObject来操作,这种方法也不是很好,你前台传回的数据格式有变化的话,后台就得做兼容。二楼的方法是一个好方法

最长的路漫漫 | 园豆:252 (菜鸟二级) | 2015-02-06 11:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册