多类型匿名对象

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. Vue笔记(props和 mounted)

    1.mounted 1.1mounted中使用$nextTick会导致页面挂掉 mounted() { // 页面卡死 this.$nextTick(() => { this.setUrl() ...

  2. vue源码分析—Vue.js 源码目录设计

    Vue.js 的源码都在 src 目录下,其目录结构如下 src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── ser ...

  3. CF396C On Changing Tree

    CF396C On Changing Tree 给定一棵以 \(1\) 为根的树,初始时所有点权为 \(0\) 有 \(m\) 次操作,分为两种 \(1\ u\ x\ k\) 表示给以 \(u\) 的 ...

  4. Python多线程操作

    多线程是一门编程语言的重要操作. GIL(全局解释器锁)存在于python解释器中,用来确保当前只有一个线程被执行,当一个线程获得GIL后,这个线程将被执行,退出时释放GIL,由下一个获得GIL的线程 ...

  5. php解决微信文章图片防盗链

    解决微信文章图片防盗链 function actionWechatImg() { header('Content-type: image/jpg'); $url = $_GET['url']; $re ...

  6. WPF效果(GIS三维续篇)

    去年这个时候简单的摸索了一下三维的GIS相关的东西,也就是仅仅玩耍了一把,这次来点真正用的上的干货效果效果: 1.加载自定义百度样式的瓦片效果 2.加载自定义百度样式的缩放效果 3.快速手动进去咱的大 ...

  7. [Alpha阶段]测试报告

    [Alpha]阶段测试报告 在测试过程中发现的BUG ​ 在最后的测试阶段中,我们不可避免的遇到了各种各样的BUG.虽然大多数都不是严重的BUG,但是这些细枝末节的问题的堆积,依然会很大程度上降低用户 ...

  8. VS2019 实用操作

    本文列出了在编写程序过程中的几个非常实用的操作方式,通过这些操作方式,可以在一定程度上减少重复操作.提高编码效率.改善编程体验. 列模式操作 列操作是一项很常用且实用的功能,可以一次性修改不同的行. ...

  9. Django-4 视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  10. 时间通用类 datetime

    /// <summary> /// 时间通用类 /// </summary> public class DateTimeGeneral { /// <summary> ...