{ 'TableName':'System', 'ActionType':0, 'Data':[ { 'SYSTEMID':'111111', 'CREATETIME':'2018-7-18' }, { 'SYSTEMID':'111112', 'CREATETIME':'2018-7-18' } ] }
目前的JSON结构是这样,还可以再调整
systemid和createtime是system表里的字段,或者说类里面的属性,通过JSON传过来的表数据可能有很多种,system表或者其他什么表,Data的结构就不一样了
我在用Newtonsoft.Json解析的时候,没有对应的类型不知道怎么处理,现在是这两种思路用反射去做
public class JsonData { public string TableName { get; set; } string ActionType { get; set; } public List<object> Data { get; set; } } public class JsonData1<T> { public string TableName { get; set; } public string ActionType { get; set; } public List<T> Data { get; set; } }
下面是我的其中一种思路,但是要用到类名的地方还是继续不下去,最后解析出来的结果是个object对象
jsonData.TableName = typeName + "." + jsonData.TableName + "," + assemblyName; Type tableClass = Type.GetType(jsonData.TableName, true, true); //获取类名 Type entityClass = typeof(List<>); Type listClass = entityClass.MakeGenericType(tableClass); var data = JsonConvert.DeserializeObject(jsonData.Data.ToString(), listClass);
可以的.用反射就行
https://github.com/wrx362114/EasyMQService/blob/master/src/ES.Framework/Quartz/SendEventMsgJob.cs.
是这一行吗?
var objmsg = Newtonsoft.Json.JsonConvert.DeserializeObject(msg.MsgJson, type) as IEventMsg;
这里前面的部分我也写出来了,但是最后那里要“as”的类型还是没法确定的,反序列化处理还是个object对象,最后就卡在这里不知道怎么处理,我在上面补充一下代码
@奶酪魔像: 所以问题出在.你是要反序列化之后要使用?
那你要用的时候肯定已经知道他是什么类型.并且是只能这个类型.as后面这个东西你是一定要明确.
才能写代码.
因为业务功能是需要对数据库进行增删改查,所有沿用之前的反射代码结合动态类Dynamic先解析JSON,然后弄了一个简单的ORM框架操作数据库