根据类名字符串,将json字串反序列化为对应的对象

Liuzhongjun2022 2024-01-29 22:54:39

根据类名字符串,将json字串反序列化为对应的对象

            string className = "employee";
            Type type = Type.GetType(className);          
            var emp =  JsonConvert.DeserializeObject<type>(json);

思路是这个意思,但实现不了,哪位高手解答一下

...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 版主 01-30
  • 打赏
  • 举报
回复 1

首先,我们假设你能实现(当然肯定能实现), 你得到的emp是什么类型? 因为你反序列出来的东西 是动态的.
那么你的emp类型一定是object的. 那你得没办法.出来任何东西.最终要干啥呢? 直接输出json ? 没意义...

既然没意义 那么你返回的object类型 或者其他jobject类型 有什么区别呢? 你的类型又没办法取值 还得动态.

那还不如 jobject 还能直接使用索引取值呢 是吧.

既然你非得要根据类型实现..我下面有一段代码.


var json = GetJson(new { id = 111, name = "222" });


var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var type = Type.GetType("LocalSQLManager.Form1+abc");
var method = scriptSerializer.GetType().GetMethod("Deserialize", new[] { typeof(string) }).MakeGenericMethod(type);
var obj = method.Invoke(scriptSerializer, new object[] { json });
Console.WriteLine(obj);

img

实现了你所谓的"动态类型"的反序列化.

但是我还是保持我之前的意见,,你实际需求是什么...

  • 举报
回复
@by_封爱 感谢你的回复,我的想法是一个API接收一个的类名(比如employee),和一个employee格式的JSON资料,直接将JSON转换成employee对象,利用Dapper直接存到数据库。这样API实现不同类型的资料共用。
by_封爱 版主 01-31
  • 举报
回复
@Liuzhongjun2022 也就是 相当于一个通用的add方法吧? ```c# int insert(string modelname,string jsonbody) { var sql="insert into ."+modelname+".... values(@name......)" dapper.execute(sql,new {}) } ``` 只是你想都实现为动态的.. 如果是我 我会这样操作. 你可以把jsonbody反序列化成Dictionary&lt;string,string&gt; 然后你的sql大概就是 ```c# var sql="insert into "+table +" values ("+string.join(",",dic.keys.select(d=&gt;"@"+d))+")"; dapper.execute(sql,dic); ``` 正常第二个参数传dic是没问题的..
by_封爱 版主 01-31
  • 举报
回复 1
@by_封爱 不过按照我的方式 传过去object 也没问题.. 只是你前面还是得拼values后面的各种@ 还不如就定义一个dict .能用2次
1条回复

110,203

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧