C# 反射(GetType) 获取动态Json对象属性值的方法

    之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊!

然后今天我再上网找了找,被我找到了,跟大家分享一下。

其实原理并不复杂,就是通过反射利用属性名称去获取属性值,以前对反射不熟悉,所以没想到啊~

不得不说反射是一种很强大的技术。。

一、反射

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Linq;   
  4. using System.Text;   
  5.   
  6. namespace GetValue   
  7. {   
  8.     class Program   
  9.     {   
  10.         static void Main(string[] args)   
  11.         {   
  12.             Person ps = new Person();   
  13.             ps.Name = "CTZ";   
  14.             ps.Age = 21;   
  15.   
  16.             Console.WriteLine(ps.GetValue("Name"));   
  17.             Console.WriteLine(ps.GetValue("Age"));   
  18.         }   
  19.     }   
  20.   
  21.     class Person   
  22.     {   
  23.         public string Name   
  24.         { get; set; }   
  25.   
  26.         public int Age   
  27.         { get; set; }   
  28.   
  29.         public object GetValue(string propertyName)   
  30.         {   
  31.             return this.GetType().GetProperty(propertyName).GetValue(this, null);   
  32.         }   
  33.     }   
  34. }  

实质语句只有一句:

this.GetType().GetProperty(propertyName).GetValue(this, null);

其他可以忽略。。

Object.GetType().GetProperty().GetValue()

不能直接读取Json转化对象 JsonConvert.DeserializeObject(JsonStr),必须有对应类型JsonConvert.DeserializeObject<>(JsonStr),所以无意义

二、获取Json对象

List<string> list = new List<string>();
            string json = JsonConvert.SerializeObject(new { Name = "jeff", Age = 23, Code = "f04536a3-832c-4ebd-95d0-15af82dbb1a2", PhoneNumber = "15902104019" });
            // 第一种
            IDictionary<string, JToken> data = JsonConvert.DeserializeObject<JObject>(json);
            foreach (var i in data)
            {
                string key = i.Key;
                var value = i.Value;
                if (value.Type.ToString() == "String")
                {
                    list.Add(value.ToString());
                }
            }

            //第二种   推荐
            var result = JsonConvert.DeserializeObject<IDictionary<string, object>>(json);
            var name = result["Name"];
            var age = result["Age"];

            foreach (var p in result.Keys)
            {
                var value = result[p];
            }

            int j = 0;
            foreach (var p in result)
            {
                var key = p.Key;
                var value = p.Value;
                var type = p.Value.GetType();
                if (type == typeof(string))
                {
                    j += 1;
                }
            }
            // 第三种
            clsTest obj = JsonConvert.DeserializeObject<clsTest>(json);
            var name1 = obj.GetType().GetProperty("Name");
            foreach (var p in obj.GetType().GetProperties())
            {
                var type = p.GetType().Name;
                var key = p.Name;
                var value = p.GetValue(obj);
            }    

 

posted @ 2017-01-06 16:16  Rocken.li  阅读(2262)  评论(0编辑  收藏  举报