zoukankan      html  css  js  c++  java
  • c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值

    转自 http://hi.baidu.com/wjinbd/item/c54d43d998beb33be3108fdd

    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));
  • 相关阅读:
    Debian 8(jessie)下设置系统启动直接进入命令行,无GUI
    Unity 查找物体对象
    Unity的生命周期函数
    Unity脚本实现添加子物体
    Unity工程中 .Meta 文件
    Unity 中简单的第三人称摄像机跟随
    github删除自己的库--Deleting a repository
    TypeScript函数
    Egret引擎学习笔记
    Egret引擎list内单个渲染对象代码编写
  • 原文地址:https://www.cnblogs.com/chusiping/p/3492552.html
Copyright © 2011-2022 走看看