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 ;我怎 ...
随机推荐
- ajax实现用户登陆,退出,java做后端
最近http老师布置了个任务,用cookie完成登陆,退出.Http老师讲的是node.js写后端,由于自己还是擅长java些,还是用Java做了. 以前跟着教程写过一个网站,当初是用jsp+serv ...
- neutron二
第四篇neutron— 网络实践 一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 ...
- iview table内渲染proptip组件
渲染proptip组件 columns: [{ title: '产品图', key: 'pic', sortable: true, render: function(h, para){ return ...
- maven打包额外的资源文件
在用Maven打包的时候发现,有一些资源文件打包不到jar包中,于是了解了一下Maven的打包配置,最后得到了解决问题的办法. Maven资源文件的默认约定 构建Maven项目的时候,如果没有进行特殊 ...
- ArrayList如何扩容?
1.调用ArrayList的参构造方法,此时集合内部是一个空数组 transient Object[] elementData; private static final Object[] DEFAU ...
- Adding appsettings.json to a .NET Core console app
This is something that strangely doesn’t seem to be that well documented and took me a while to figu ...
- 大白话 Scala 控制抽象
2019-04-14 关键字: Scala.Scala控制抽象.Scala高阶函数 本篇文章系笔者根据当前掌握的知识对 Scala 控制抽象的教材知识总结,不保证文章所述内容的绝对.完全正确性. 在 ...
- 集合源码分析[2]-AbstractList 源码分析
AbstractList 类型:抽象类 接口的继承以及实现关系 继承AbstractCollection 实现List接口 典型方法实现解析 public List<E> subList( ...
- go实现dgraph的各种操作
go实现dgraph的各种操作 import "github.com/dgraph-io/dgo" import "github.com/dgraph-io/dgo/pr ...
- LOJ#2665 树的计数
题意:给你DFS序和BFS序,求树的期望高度. 解:先分析性质. 考虑到BFS序是分层的,DFS序的子树是一段,那么我们遍历BFS序并在DFS序上标记对应点的话,就会发现BFS序每一层都会把若干棵子树 ...