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

时间:2023-03-09 06:59:49
C# 反射(GetType)  获取动态Json对象属性值的方法

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

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

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

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

一、反射

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

实质语句只有一句:

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);
}