之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊!
然后今天我再上网找了找,被我找到了,跟大家分享一下。
其实原理并不复杂,就是通过反射利用属性名称去获取属性值,以前对反射不熟悉,所以没想到啊~
不得不说反射是一种很强大的技术。。
一、反射
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace GetValue
- {
- class Program
- {
- static void Main(string[] args)
- {
- Person ps = new Person();
- ps.Name = "CTZ";
- ps.Age = 21;
- Console.WriteLine(ps.GetValue("Name"));
- Console.WriteLine(ps.GetValue("Age"));
- }
- }
- class Person
- {
- public string Name
- { get; set; }
- public int Age
- { get; set; }
- public object GetValue(string propertyName)
- {
- return this.GetType().GetProperty(propertyName).GetValue(this, null);
- }
- }
- }
实质语句只有一句:
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 = , Code = "f04536a3-832c-4ebd-95d0-15af82dbb1a2", PhoneNumber = "" });
// 第一种
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 = ;
foreach (var p in result)
{
var key = p.Key;
var value = p.Value;
var type = p.Value.GetType();
if (type == typeof(string))
{
j += ;
}
}
// 第三种
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);
}