c# 利用反射 從json字符串 動態建立類的實例 並動態爲實例成員賦值

轉自 http://hi.baidu.com/wjinbd/item/c54d43d998beb33be3108fddjson

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 使用反射方法spa

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  調用3d

String jsonstr = "\"name\":\"zhang\",\"age\":\"19\"";
stu aa = (stu)jsonToObject(jsonstr, typeof(stu));
相關文章
相關標籤/搜索