首页 新闻 赞助 找找看

存在多种转换目标的实体类,能不能通过类名字符串把JSON解析成对应的实体?

0
悬赏园豆:10 [待解决问题]
{
    '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);
复制代码
夜尽丶的主页 夜尽丶 | 初学一级 | 园豆:173
提问于:2018-07-20 14:22
< >
分享
所有回答(2)
0

可以的.用反射就行

https://github.com/wrx362114/EasyMQService/blob/master/src/ES.Framework/Quartz/SendEventMsgJob.cs.

吴瑞祥 | 园豆:29449 (高人七级) | 2018-07-20 15:07

是这一行吗?

 var objmsg = Newtonsoft.Json.JsonConvert.DeserializeObject(msg.MsgJson, type) as IEventMsg;

这里前面的部分我也写出来了,但是最后那里要“as”的类型还是没法确定的,反序列化处理还是个object对象,最后就卡在这里不知道怎么处理,我在上面补充一下代码

支持(0) 反对(0) 夜尽丶 | 园豆:173 (初学一级) | 2018-07-20 15:34

@奶酪魔像: 所以问题出在.你是要反序列化之后要使用?

那你要用的时候肯定已经知道他是什么类型.并且是只能这个类型.as后面这个东西你是一定要明确.

才能写代码.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2018-07-20 15:44
0

因为业务功能是需要对数据库进行增删改查,所有沿用之前的反射代码结合动态类Dynamic先解析JSON,然后弄了一个简单的ORM框架操作数据库

夜尽丶 | 园豆:173 (初学一级) | 2018-08-29 09:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册