C# 反射(GetType) 获取动态Json对象属性值的方法
之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊!
然后今天我再上网找了找,被我找到了,跟大家分享一下。
其实原理并不复杂,就是通过反射利用属性名称去获取属性值,以前对反射不熟悉,所以没想到啊~
不得不说反射是一种很强大的技术。。
一、反射
- 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);
}
C# 反射(GetType) 获取动态Json对象属性值的方法的更多相关文章
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- js动态更改对象属性值的方法
下面代码,替换属性名称包含date的属性中的T为空格. for (var o in data) { //console.info(eval("d ...
- C#通过属性名字符串获取、设置对象属性值
之前理工项目从这个博客找到了相对应的方法:C#通过属性名字符串获取.设置对象属性值 https://www.cnblogs.com/willingtolove/p/12198871.html
- java 通过反射获取和设置对象属性值
public static Object parseDate(Object object){ SimpleDateFormat sdf = new SimpleDateFormat("yyy ...
- WPF非UI线程获取修改控件属性值的方法
public class InvokeHelper { #region delegates private delegate object MethodInvoker(Control control, ...
- Mybatis-简单基于源码了解获取动态代理对象
这是我们要测试的代码 OderDao就是我们要需要获取的对象. 首先我们根据传入的参数,进入SqlSessionFactoryBuilder 中的对应的build 方法,第一步创键XMLConfigB ...
- Day14_84_通过反射机制修改和获取class里的属性值
通过反射机制修改和获取class里的属性值 * 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象) * 属性对象.get(Object); 获取Object对象中 ...
- 反射就是获取该类的.class文件里面的方法,属性
反射就是获取该类的.class文件里面的方法,属性
- WPF 动态生成对象属性 (dynamic)
原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...
随机推荐
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
一个瀑布流的实现有三种方式: 继承自UIScrollView,仿写UITableView的dataSource和delegate,创造一个缓存池用来实现循环利用cell 写多个UITableview( ...
- 使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)
1.首先是rabbitmq的配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...
- 1. pyhanlp介绍和简单应用
1. pyhanlp介绍和简单应用 2. 观点提取和聚类代码详解 1. 前言 中文分词≠自然语言处理! 中文分词只是第一步:HanLP从中文分词开始,覆盖词性标注.命名实体识别.句法分析.文本分类等常 ...
- browser_autopwn2
browser_autopwn2是个啥玩意儿? 一个集合了浏览器漏洞的小框架 option msf > use auxiliary/server/browser_autopwn2 msf aux ...
- 引用Interop.SQLDMO.dll后的注意事项。
SQLDMO.dll是个好东西,ASP.NET利用它可以实现在线备份.还原数据库等各种功能.近日有客户要求为其在后台添加一个管理数据库的功能.于是就出现了这篇文章. 由于客户的数据库和WEB服 ...
- 数据库ACID属性
A:Atomicity,原子性.即是事务要么全部完成,要么不完成. C:Consistency,一致性.即是事务如果是并发的,系统也必须如同串行一样. I:Isolation,隔离性.即是使得每个事务 ...
- [Python学习]Python学习资料汇总
Python其实很简单,入门+提高看一些简单的教程就能学会,这里列出一些比较好的资料: 廖雪峰博客 https://www.liaoxuefeng.com/wiki/0014316089557264a ...
- jce_policy安装【java密码扩展无限制权限策略文件安装】
下载与JDK或JRE对应版本的jce文件包,当前机器的jdk为1.8,所以下载jce_policy-8.zip. 下载地址:http://www.oracle.com/technetwork/java ...
- orcale存储过程学习之路(一)
----------------------------------------- 建表 ------------------------------------------ create table ...
- R-Sys.time计算程序运行时间
R用Sys.time()可以查看当前系统时间程序开始时记录: timestart<-Sys.time()程序临结束时记录: timeend<-Sys.time()程序运行时间: runni ...