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 ;我怎 ...
随机推荐
- IBM developer:Setting up the Kafka plugin for Ranger
Follow these steps to enable and configure the Kafka plugin for Ranger. Before you begin The default ...
- 文本相似度 — TF-IDF和BM25算法
1,$TF-IDF$算法 $TF$是指归一化后的词频,$IDF$是指逆文档频率.给定一个文档集合$D$,有$d_1, d_2, d_3, ......, d_n \in D$.文档集合总共包含$m$个 ...
- [LeetCode] 23. 合并K个排序链表
题目链接: https://leetcode-cn.com/problems/merge-k-sorted-lists/ 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂 ...
- [题解]N 皇后问题总结
N 皇后问题(queen.cpp) [题目描述] 在 N*N 的棋盘上放置 N 个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置 2 个皇后) ,编程求解所有的 ...
- java易混淆知识小结
1.java的基本数据类型,及所占字节和范围 byte: 字节型,占1个字节,8位,范围是 -2^7 ~ 2^7-1 short:短整型,占2个字节,16位,范围是 -2^15 ~ 2^15 ...
- springmvc注解驱动
<?xml version="1.0" encoding="UTF-8"?> <beans xsi:schemaLocation=" ...
- DAY23、面向对象特性
一.复习1.类: 对象属性的查找顺序:先找自身再找类 类的名称空间:直接写在类中 对象的名称空间:写在__init__方法中,通过self.属性形成名称空间中的名字 类的方法:在类中用@classme ...
- 制作H5像一个div中一张长图,里边是一条一条信息,需要点击的响应式方法
<style> .nav_box { margin-top: 20vh } .section1 .directory { margin-top: 4vh; position: relati ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- zookeeper集群的简单搭建
zookeeper简单介绍 zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目的一个子项目,并根据google发表的一篇论文来实现的.zookeeper为分布式系统提 ...