从Object对象中读取属性的值
C#是强类型语言,强到多变态?一个对象没有定义某个属性,你想点出来,IDE直接给你报语法错误。远不如js那么自由,想怎么点怎么点。
如果你从别人接口中拿到的就是Object类型,你想获取某个属性的值怎么办?
弱类型语言中,一个对象可以随便点出里面的属性,即使没有定义也只是返回给你一个undefined。强类型语言就必须使用实体(类),还好C#有个dynamic,让c#具备了弱类型语言特性
eg1:
static void Main(string[] args)
{
object obj = new
{
Name = "小明",
SayHi = "你妹的!"
}; dynamic dyName = ((dynamic)obj).Name;
dynamic dySayHi = ((dynamic)obj).SayHi; Console.WriteLine(dyName + "\t" + dySayHi);
}
你可以创建一个实体,用序列化再反序列化的方式,当然笔者不推荐,如果你就用一次的话还要为之创建一个实体,累不累啊!
下面是笔者推荐的方式,先把对象转化成Type类型,再获取它的属性,再获取属性的值
eg2:
static void Main(string[] args)
{
object obj = new
{
Name = "小明",
SayHi = "你妹的!"
}; Console.WriteLine("Name:\t" + obj.GetType().GetProperty("Name").GetValue(obj));
Console.WriteLine("SayHi:\t" + obj.GetType().GetProperty("SayHi").GetValue(obj));
Console.ReadKey();
}
eg3:
class Program
{
static void Main(string[] args)
{
GetObjectPropertyValue();
Console.ReadKey();
} private static void GetObjectPropertyValue()
{ List<object> list = (List<object>)GetObj();//强制类型转化
foreach (var item in list)
{
Console.WriteLine(item.GetType().GetProperty("Title").GetValue(item) + "\t" + item.GetType().GetProperty("Content").GetValue(item));
}
} private static object GetObj()
{
List<object> list = new List<object>();
object message = new
{
Title = "ceshi111",
Content = "hahahah111"
};
object message2 = new
{
Title = "ceshi222",
Content = "hahahah222"
};
list.Add(message);
list.Add(message2);
return list;
}
}
从Object对象中读取属性的值的更多相关文章
- C# 从Object对象中读取属性的值
https://www.cnblogs.com/xbblogs/p/7739483.html
- 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别
一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({ d ...
- js为Object对象动态添加属性和值 eval c.k c[k]
const appendInfo = () => { const API_SECRET_KEY = 'https://github.com/dyq086/wepy-mall/tree/maste ...
- javascript获取对象中的属性及值
function displayProp(obj){ var names=""; for(var name in obj){ names+=name+": "+ ...
- JavaScript 深入了解对象中的属性
本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...
- C#比较两个对象中的指定字段值是否相等
一.创建CompareFieldAttribute标识要比较的字段 using System; namespace CompareObjField { /// <summary> /// ...
- 枚举对象中的属性 for . . in
枚举对象中的属性:把对象中所有的属性和值都取出来 使用 for . . . in 语句 语法: for(var 变量 in 对象){ } for . . . in 语句 对象中有几个属性,循 ...
- C#验证对象中的属性是否为空的共通方法
在后台接口处理时,经常需要对请求的参数做验证.因此提取了共通方法,方便进行判断. /// <summary> /// 数据验证工具类 /// </summary> public ...
- C#利用反射实现两个类的对象之间相同属性的值的复制
http://blog.csdn.net/u013093547/article/details/53584591 今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝 ...
随机推荐
- 构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型
本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本 ...
- C#八大排序算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选
本文由 网易云发布. 工信部官网 2017年年底,经专家评审和遴选,中华人民共和国工业和信息化部(以下简称“工信部”)公示了2017年电信和互联网行业网络安全试点示范项目,网易云易盾的“自适应DDo ...
- HTTP协议、HTTP协议原理分析
百度百科中说明: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为 ...
- Stack栈类与、Queue队列与线性表的区别和联系
栈和队列都属于特殊的线性表 一.定义 1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...
- FunDA(7)- Reactive Streams to fs2 Pull Streams
Reactive-Stream不只是简单的push-model-stream, 它还带有“拖式”(pull-model)性质.这是因为在Iteratee模式里虽然理论上由Enumerator负责主动推 ...
- collectd+influxdb+grafana
今天一天都在弄这个,最终发现在配置grafana的时候选择influxdb的版本时候选错了.(挠头~~~!!!) collectd的配置还算简单,基本看过配置文件就比较清楚. influxdb(Go ...
- 汉诺塔问题(C++版)
题目描述 Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到中间的杆 ...
- 批处理 安装、卸载 window service
注意:安装中调用了卸载的bat,安装之前先卸载...PS:可以删除 安装代码: @echo off set filename=LXServer.exe set servicename=Service1 ...
- Netty核心概念(8)之Netty线程模型
1.前言 第7节初步学习了一下Java原本的线程池是如何工作的,以及Future的为什么能够达到其效果,这些知识对于理解本章有很大的帮助,不了解的可以先看上一节. Netty为什么会高效?回答就是良好 ...