博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 反射(GetType) 获取动态Json对象属性值的方法
阅读量:6696 次
发布时间:2019-06-25

本文共 2095 字,大约阅读时间需要 6 分钟。

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

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

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

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

一、反射

  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
list = new List
(); string json = JsonConvert.SerializeObject(new { Name = "jeff", Age = 23, Code = "f04536a3-832c-4ebd-95d0-15af82dbb1a2", PhoneNumber = "15902104019" }); // 第一种 IDictionary
data = JsonConvert.DeserializeObject
(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
>(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
(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); }

 

转载地址:http://qzvoo.baihongyu.com/

你可能感兴趣的文章
spring hibernate实现动态替换表名(分表)
查看>>
精通ArrayList,关于ArrayList你想知道的一切
查看>>
KeyStore和TrustStore
查看>>
iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)
查看>>
vs和vim
查看>>
基于socket套接字发送大文件示例
查看>>
hdu1247 Hat’s Words
查看>>
Druid 介绍及配置
查看>>
Daily Scrum- 12/23
查看>>
Daily Scrum – 1/12
查看>>
pyinstaller---将py文件打包成exe
查看>>
【Prince2科普】Prince2的七大原则(7)
查看>>
Git指令操作
查看>>
学习小结(一) —— 基础数据结构
查看>>
WinDbg内核调试命令
查看>>
React文档(十七)非受控组件
查看>>
python中的metaclass
查看>>
大白叔叔专题之匹配、网络流(二)(第一题不是呐~)
查看>>
在centos中使用rpm安装包安装jenkins
查看>>
Linux释放内存空间
查看>>