C#匿名对象(转JSON)
多类型匿名对象
var result = new
{
pages = ,
users = new System.Collections.ArrayList
{
new{id=,name=""},
new{id=,name=""}
}
};
result.users.Add(new { id = , name = "" }); new {
a = Tuple
.Create(
new List<Attribute>()
{
new MaskAttribute(".00")
},),
b = Tuple
.Create(
new List<Attribute>()
{
new MaskAttribute("#.0")
},) } public static Tuple<List<attributes>,T> CreateMetaField <T>(this T value , params Attribute[] args)
new {
a=.CreateMetaField(new attr...() ) ,
b=.CreateMetaField(new attr...() )
}
完全动态方式2:
public class DynamicClassHelper
{
/// <summary>
/// 创建属性
/// </summary>
/// <param name="propertyname"></param>
/// <returns></returns>
private static string Propertystring(string propertyname)
{
StringBuilder sbproperty = new StringBuilder();
sbproperty.Append(" private string _" + propertyname + " = null;\n");
sbproperty.Append(" public string " + "" + propertyname + "\n");
sbproperty.Append(" {\n");
sbproperty.Append(" get{ return _" + propertyname + ";} \n");
sbproperty.Append(" set{ _" + propertyname + " = value; }\n");
sbproperty.Append(" }");
return sbproperty.ToString();
}
/// <summary>
/// 创建动态类
/// </summary>
/// <param name="listMnProject">属性列表</param>
/// <returns></returns>
public static Assembly Newassembly(List<string> propertyList)
{
//创建编译器实例。
CSharpCodeProvider provider = new CSharpCodeProvider();
//设置编译参数。
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true; //创建动态代码。
StringBuilder classsource = new StringBuilder();
classsource.Append("public class dynamicclass \n");
classsource.Append("{\n"); //创建属性。
for (int i = ; i < propertyList.Count; i++)
{
classsource.Append(Propertystring(propertyList[i]));
}
classsource.Append("}");
System.Diagnostics.Debug.WriteLine(classsource.ToString());
//编译代码。
CompilerResults result = provider.CompileAssemblyFromSource(paras, classsource.ToString());
//获取编译后的程序集。
Assembly assembly = result.CompiledAssembly; return assembly;
}
/// <summary>
/// 给属性赋值
/// </summary>
/// <param name="objclass"></param>
/// <param name="propertyname"></param>
/// <param name="value"></param>
public static void Reflectionsetproperty(object objclass, string propertyname, string value)
{
PropertyInfo[] infos = objclass.GetType().GetProperties();
foreach (PropertyInfo info in infos)
{
if (info.Name == propertyname && info.CanWrite)
{
info.SetValue(objclass, value, null);
}
}
}
/// <summary>
/// 得到属性值
/// </summary>
/// <param name="objclass"></param>
/// <param name="propertyname"></param>
public static void Reflectiongetproperty(object objclass, string propertyname)
{
PropertyInfo[] infos = objclass.GetType().GetProperties();
foreach (PropertyInfo info in infos)
{
if (info.Name == propertyname && info.CanRead)
{
System.Console.WriteLine(info.GetValue(objclass, null));
}
}
}
}
使用方法
//将配置的参数名加入propertyList列表
List<string> propertyList = ParamsList.Select(t => t.CodeID).ToList();
//获取数据导入记录明细的属性名
T_DataDetailExtInfo modelDataDetail = new T_DataDetailExtInfo();
Type typeDataDetail = modelDataDetail.GetType(); //获得该类的Type
//将数据表属性名加入propertyList列表
propertyList.AddRange(typeDataDetail.GetProperties().Select(p => p.Name));
//创建动态类,监测参数ID为它的属性
Assembly assembly = DynamicClassHelper.Newassembly(propertyList);
var listclass = new List<dynamic>();
if (listDataDetail != null && listDataDetail.Count > )
{
//明细数据
foreach (var data in listDataDetail)
{
dynamic model = assembly.CreateInstance("dynamicclass");
//赋值
DynamicClassHelper.Reflectionsetproperty(model, "ID", data.DetailID);
} listclass.Add(model);
}
匿名对象转Json——有匿名对象有时候不必要每次去创建新的Model类或动态创建Model类
List<dynamic> listData = new List<dynamic>();
foreach (var temp in listLog)
{
var logModel = new
{
DataDate = temp.DataTime,
Content = temp.LogContent
};
listData.Add(logModel);
} string strJson = JsonHelper.GetUnknownJson(listData); /// <summary>
/// 对未知或匿名对象进行Json序列化 ——JsonHelper类
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string GetUnknownJson(object value)
{
if (value == null) return null;
var jss = new JavaScriptSerializer();
jss.MaxJsonLength = int.MaxValue;
return jss.Serialize(value);
}
C#匿名对象(转JSON)的更多相关文章
- C# JavascriptSerializer与匿名对象打造Json的完美工具
一:背景 在web项目中经常需要生成json数据,返回给前端ajax. 无论是ashx,还是WebMethod,可以人工的用字符串去拼接,最终得到json数据. 有没有更好的方法呢?我个人推荐使用Ja ...
- Json.Net 反序列化成匿名对象
反序列化一个object var str1 = "{id:1,name:'111',x:[1,2,3],y:{a:'ssss',b:'dddd'}"; var obj1 = Jso ...
- S1:对象与JSON
JSON全称为JavaScript对象表示法(JavaScript Object Notation). JSON是JavaScript中对象的字面量,是对象的表示方法,通过使用JSON,可以减少中间变 ...
- C# 匿名对象(匿名类型)、var、动态类型 dynamic
本文是要写的下篇<C#反射及优化用法>的前奏,不能算是下一篇文章的基础的基础吧,有兴趣的朋友可以关注一下. 随着C#的发展,该语音内容不断丰富,开发变得更加方便快捷,C# 的锋利尽显无疑. ...
- C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic
例子 返回一个LIst<oject>类型 而oject含有 30个字段 而我只需要两个字段.这里实用dynamic 和 linq. 上代码: 注意select new {} 为匿名类型,这 ...
- C# - 匿名对象属性的赋值与取值
在new出匿名对象的函数内可以直接调用该匿名对象的属性取值. 可是在其它函数就无法调用匿名对象的属性或方法. 这时,我们可以通过c#的反射机制取值: 文章出处:https://www.cnblogs. ...
- ASP.NET匿名对象与集合的使用
一.关于匿名类型的特性 1.匿名类型 定义:匿名对象 var vobj = new { id = "编号", title = "标题", content = & ...
- C#对Jason序列化匿名对象
引用: using System.Web.Script.Serialization; 代码: var resp = new { flag = false, url = ConfigReader.Log ...
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
比如有一个匿名对象,var result =......Select( a=>new { id=a.id, name=a.name});然后Object obj = result ;我怎 ...
随机推荐
- HTML基础-------最初概念以及相关语法
HTML概念以及相关语法 HTML HTML是一种类似于(c,java,c++)之类的语言,他是用来描述网页的一种语言.通过各种标签所代表的语义来构建出一个网页,再通过浏览器的渲染功能来实现该网页的各 ...
- Cordova plugin
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010106153/article/details/53418528Cordova plugin工程 ...
- iic接口介绍
最近遇到一个BUG,跟IIC通信有关,所以借这个机会总结一下IIC总线协议 1.引脚接口介绍 1.A0,A1,A2为24LC64的片选信号,IIC总线最多可以挂载8个IIC接口器件,通过对A0,A1, ...
- keepalived的主从备份服务器
一.环境说明 1.操作系统内核版本:linux 6.0 2.Keepalived软件版本:keepalived-1.1.20.tar.gz 二.环境配置 1.主Keepalived服务器IP地址 19 ...
- Day10 空时编码理论之无线信道、分集和复用
在有限的频谱资源上,如何高效地加以利用,增加信道容量,并保证信息可靠地传输. 在单天线链路系统中,采用先进的编码(例如turbo码和LDPC码)可以接近香农容量极限. 通过增加发射端和接收端的天线数量 ...
- MediaManager配置公网访问功能
安装时设置传输本地地址及端口,如图: 路由器设置端口映射,如下图 使用时,打开公网地址http://IpAddress:8090/ContentManager/MainPage.aspx?zh-CN# ...
- 免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐
免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐 隐鹤 倾心开发 2019.4.1 1. 引言 经过前后大约零零散散的一年的开发, ...
- centos7之zabbix的监控H3C ER3200G2流量
1.首先在服务器端安装snmp工具 yum -y install net-snmp-utils snmp-libs snmp-devel snmp 启动snmpd服务 systemctl start ...
- Java中的Null是什么?
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- g.DrawImage图片合成在本机可以,在服务器一直报内存不够
g.DrawImage图片合成在本机可以,在服务器一直报内存不够,发现是这个要设为false