博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
阅读量:7163 次
发布时间:2019-06-29

本文共 1597 字,大约阅读时间需要 5 分钟。

转自 

1 创建自己要用的类

class stu    {        string _name;        int _age;        public string name        {
get{
return _name;} set {_name=value;} } public int age { get { return _age; } set { _age = value; } } }

 

2 使用反射方法

public object jsonToObject(string jsonstr, Type objectType)//传递两个参数,一个是json字符串,一个是要创建的对象的类型    {        string[] jsons = jsonstr.Split(new char[] { ',' });//将json字符串分解成 “属性:值”数组        for (int i = 0; i < jsons.Length; i++)        {            jsons[i] = jsons[i].Replace("\"", "");        }//去掉json字符串的双引号        object obj = System.Activator.CreateInstance(typeof(stu)); //使用反射动态创建对象        PropertyInfo[] pis = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);//获得对象的所有public属性        if (pis != null)//如果获得了属性            foreach (PropertyInfo pi in pis)//针对每一个属性进行循环            {                for (int i = 0; i < jsons.Length; i++)//检查json字符串中的所有“属性:值”类表                {                    if (jsons[i].Split(new char[] { ':' })[0] == pi.Name)//如果对象的属性名称恰好和json中的属性名相同                    {                        Type proertyType = pi.PropertyType; //获得对象属性的类型                        pi.SetValue(obj, Convert.ChangeType(jsons[i].Split(new char[] { ':' })[1], proertyType), null);                        //将json字符串中的字符串类型的“值”转换为对象属性的类型,并赋值给对象属性                    }                }            }        return obj;    }

3  调用

String jsonstr = "\"name\":\"zhang\",\"age\":\"19\"";stu aa = (stu)jsonToObject(jsonstr, typeof(stu));

 

 

 

转载于:https://www.cnblogs.com/chusiping/p/3492552.html

你可能感兴趣的文章