由前台发给服务器的数据是JSON数据格式,那么在C#中有没有像java中的
JSONObject json= JSONObject.fromObject(string);类似的方法呢。我所说的不是C#中的反序列化方法。
.....json.net
用过都说好!!
你这种用法能起到什么作用?我在C#里面没有见过你这种需求
情况是这样的:
在前台表单中,通过
var data = $("#form1").serializeArray();
var str=JSON.stringify(data);获取到了表单对象的序列化字符串如
str='[{"name":"username","value":"555"},{"name":"password","value":"666"},{"name":"telephone","value":"7"}]'
那么我在后台怎么对这个字符串进行解析呢?
@mcfer: 反序列化
@刘宏玺:
您的意思是我先定义一个类
class User
{
public string name;
public string value;
}
然后通过反序列化得到一个List<User>吗?再对这个List进行操作吗?
@mcfer: 对呢!就是这个意思了
@刘宏玺: 但是我觉得这样不是很好啊。
1、由于前台与服务器频繁交换数据,而且数据格式比较多,这就需要在后台定义比较多的类。
2、由前台发送的json数据不是我自己拼接的,而是通过
var data = $("#form1").serializeArray();
var str=JSON.stringify(data)方法获取的,如果表单数据比较多的话,就会导致name和value的键值对过多,并且反序列化产生的是一个List<User>,如果我要获取name=age的user的value值,就会比较困难?那么前台的Json格式数据一般是通过自己拼接字符串的形式得到的吗?
@mcfer: 你没救了。。。
@mcfer: 如果你想很随意的定义表单的值就别用json了,用了反倒麻烦,直接Request["key"]这样取值好了,如果用json,就定义好表单的内容,然后和后台C#对应起来,这个弄成最全面的,包含所有的键,这样就不会出问题了
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>接口, 即可达到 属性动态添加, 动态访问, 甚至属性名 忽略大小写.
可以用Newtonsoft.Json.Linq,把你的json字符串转成一个JObject来操作,这种方法也不是很好,你前台传回的数据格式有变化的话,后台就得做兼容。二楼的方法是一个好方法