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


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

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

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

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

    一、反射

    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<string> list = new List<string>();
                string json = JsonConvert.SerializeObject(new { Name = "jeff", Age = 23, Code = "f04536a3-832c-4ebd-95d0-15af82dbb1a2", PhoneNumber = "15902104019" });
                // 第一种
                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 = 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<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);
                }    
  • 相关阅读:
    PHP之Trait详解
    PHP中__call()方法与重载解析
    PHP Closure(闭包)类详解
    PHP 核心特性
    回调函数
    php的各种 I/O流 以及用法
    关于php的buffer(缓冲区)
    php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别
    低功耗设计入门(一)——低功耗设计目的与功耗的类型
    从CMOS到触发器(一)
  • 原文地址:https://www.cnblogs.com/xdot/p/6256736.html
Copyright © 2020-2023  润新知