C#通过属性名称获取(读取)属性值的方法
之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊!
然后今天我再上网找了找,被我找到了,跟大家分享一下。
其实原理并不复杂,就是通过反射利用属性名称去获取属性值,以前对反射不熟悉,所以没想到啊~
不得不说反射是一种很强大的技术。。
一、反射
- 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#通过属性名称获取(读取)属性值的方法的更多相关文章
- C#通过属性名称获取(读取)属性值的方法 z
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Prop ...
- python 分享一个通过 (key1.key2.key3) 形式获取嵌套字典值的方法
最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,如果一层层的去剥,效率不高,脚本繁重,所以写了一个可以通过(key1.key2.key3)形式获取嵌套字典值的方法,如有不对或者需要优 ...
- 【ABAP系列】SAP ABAP获取域(domain)值的方法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP获取域(doma ...
- jquery通过name,id名称获取当前value值
name是input标签的属性值,jQuery提供了attr() 方法用于设置/改变属性值 $("input:text").attr("name");$(&qu ...
- jQuery获取多种input值的方法
1 if($("input[name=item][value='val']").attr('checked')==true) //判断是否已经打勾 name即控件name属性,va ...
- Query获取多种input值的方法
1 if($("input[name=item][value='val']").attr('checked')==true) //判断是否已经打勾 name即控件name属性,va ...
- [转载]jquery获取元素索引值index()方法:
jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的 ...
- jquery获取元素索引值index()方法
jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的 ...
- Ionic3在ts中获取html中值的方法
我觉得有两种方法,都是Angular中的语法,一种是把值当做参数传递,另一种是使用ngModel实现双向绑定 还有一种很少用到的,Js的原生方法:document.getElementById('ch ...
随机推荐
- 后台管理UI的选择
最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1.美观.大方.简洁 2.兼容I ...
- 解决NTKO Office中文文件名保存到服务器时出现乱码的问题
再使用NTKO office控件时,在ntko往服务器提交文件时,中文文件名会出现乱码的问题! 其实解决这个问题可以换一种思路,在ntko往服务器提交文件时英文肯定是不会出现乱码的问题的! 那么想办法 ...
- SIMLock锁卡功能解析
一.锁卡背景介绍 锁卡即SIMLock,当手机开机启动或者插入SIM卡时,手机modem侧预置在NV项中的配置信息会与SIM卡中的信息做比对,检测是否匹配.若匹配,则SIM卡可以正常使用.若不匹配,则 ...
- C/C++ Memory Layout
参考 http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html
- 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...
- node使用xml-writer生成本地XML文件实例
npm中xml-writer文档的链接地址:https://www.npmjs.com/package/xml-writer npm中的文档比较简单,而且生成本地xml文件的demo并不正确.本篇是对 ...
- 使用 Vue 2.0 实现服务端渲染的 HackerNews
Vue 2.0 支持服务端渲染 (SSR),并且是流式的,可以做组件级的缓存,这使得极速渲染成为可能.同时, 和 2.0 也都能够配合 SSR 提供同构路由和客户端 state hydration.v ...
- 纯CSS3实现多层云彩变换飞行动画
查看效果:http://hovertree.com/texiao/css3/4/效果2 效果图: 代码如下: <!doctype html> <html lang="zh& ...
- handlebars.js的运用与整理
最近在做部门的技术分享网站,主要是一些文章的列表和演讲信息展示,内容比较规律,复用性较高.同事推荐了 handlebars.js.用来看看. handlebars.js是一种静态JS模板,用起来还蛮简 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...