多类型匿名对象

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)的更多相关文章

  1. C# JavascriptSerializer与匿名对象打造Json的完美工具

    一:背景 在web项目中经常需要生成json数据,返回给前端ajax. 无论是ashx,还是WebMethod,可以人工的用字符串去拼接,最终得到json数据. 有没有更好的方法呢?我个人推荐使用Ja ...

  2. Json.Net 反序列化成匿名对象

    反序列化一个object var str1 = "{id:1,name:'111',x:[1,2,3],y:{a:'ssss',b:'dddd'}"; var obj1 = Jso ...

  3. S1:对象与JSON

    JSON全称为JavaScript对象表示法(JavaScript Object Notation). JSON是JavaScript中对象的字面量,是对象的表示方法,通过使用JSON,可以减少中间变 ...

  4. C# 匿名对象(匿名类型)、var、动态类型 dynamic

    本文是要写的下篇<C#反射及优化用法>的前奏,不能算是下一篇文章的基础的基础吧,有兴趣的朋友可以关注一下. 随着C#的发展,该语音内容不断丰富,开发变得更加方便快捷,C# 的锋利尽显无疑. ...

  5. C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic

    例子 返回一个LIst<oject>类型 而oject含有 30个字段 而我只需要两个字段.这里实用dynamic 和 linq. 上代码: 注意select new {} 为匿名类型,这 ...

  6. C# - 匿名对象属性的赋值与取值

    在new出匿名对象的函数内可以直接调用该匿名对象的属性取值. 可是在其它函数就无法调用匿名对象的属性或方法. 这时,我们可以通过c#的反射机制取值: 文章出处:https://www.cnblogs. ...

  7. ASP.NET匿名对象与集合的使用

    一.关于匿名类型的特性 1.匿名类型 定义:匿名对象 var vobj = new { id = "编号", title = "标题", content = & ...

  8. C#对Jason序列化匿名对象

    引用: using System.Web.Script.Serialization; 代码: var resp = new { flag = false, url = ConfigReader.Log ...

  9. c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic

    比如有一个匿名对象,var  result =......Select( a=>new {  id=a.id, name=a.name});然后Object  obj =  result ;我怎 ...

随机推荐

  1. robotFramework第二篇之关键字的定义和使用

    lesson.robot *** Keywords *** 打开谷歌浏览器并访问百度首页 Log 打开浏览器,输入http://www.baidu.com,进入百度首页 输入用户名 [Argument ...

  2. Ruby入坑指南

    1.1 简介 Ruby语言是由松本行弘(Matz)设计,是一门通用的.面向对象的.解释型语言. 1.2 Ruby?RUBY?ruby? 1.Ruby:用来表示编程的语言 2.ruby:是指一个计算机程 ...

  3. springboot文件上传下载简单使用

    springboot的文件上传比较简单 一.使用默认的Resolver:StandardServletMultipartResolver controller package com.mydemo.w ...

  4. Vue.Draggable 文档总结

    本文章转自https://blog.csdn.net/zjiang1994/article/details/79809687 Vue.Draggable学习总结 Draggable为基于Sortabl ...

  5. Cookie Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  6. vue移动端常用组件

    3d picker组件 参考链接:https://segmentfault.com/a/1190000007253581?utm_source=tag-newest安装:npm install vue ...

  7. 译注(2): How to Write a 21st Century Proof

    原文:Computer Scientist Tells Mathematicians How To Write Proofs 对比一下下面两个证明哪个更好? 版本一: "A square a ...

  8. linux系统设置cpu孤立

    介绍 针对cpu密集型的任务,消耗cpu较高,最好设置cpu亲和度,以提高任务执行效率,避免cpu进行上下文切换,浪费不必要的性能. 特定任务(进程/线程)需要独占一个cpu核心并且不想让其他任务(进 ...

  9. c#使用资源文件完成国际化

    路径结构如下 namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void Te ...

  10. git的安装(和远程仓库建立连接)

    安装完git 1.配置用户名和邮箱 $ git config --global user.name "My Name"  $ git config --global user.em ...