using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic; namespace SelfDynamicObj
{
public delegate object DeleDynamic(dynamic sender, params object[] pramas);
public class DynObj : DynamicObject
{
public Dictionary<string, object> _values; public DynObj()
{
_values = new Dictionary<string, object>();
} public object GetPropertyValue(string propertyName)
{
if (_values.ContainsKey(propertyName) == true)
{
return _values[propertyName];
}
return null;
} public void SetPropertyValue(string propertyName, object value)
{
if (_values.ContainsKey(propertyName) == true)
{
_values[propertyName] = value;
}
else
{
_values.Add(propertyName, value);
} } public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = GetPropertyValue(binder.Name);
return result == null ? false : true;
} public override bool TrySetMember(SetMemberBinder binder, object value)
{
SetPropertyValue(binder.Name, value);
return true;
} public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
var deleObj = GetPropertyValue(binder.Name) as DelegateObj;
if (deleObj == null || deleObj.CallMethod == null)
{
result = null;
return false;
}
result = deleObj.CallMethod(this, args);
return true;
} public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
{
return base.TryInvoke(binder, args, out result);
} } public class DelegateObj
{
private DeleDynamic _deleDynamic; public DeleDynamic CallMethod
{
get { return _deleDynamic; }
} public DelegateObj(DeleDynamic deleDynamic)
{
this._deleDynamic = deleDynamic;
} public static DelegateObj Function(DeleDynamic deleDynamic)
{
return new DelegateObj(deleDynamic);
}
}
} 使用如下:

List<string> names = new List<string>() { "a00", "b00", "c00", "d00" };


dynamic obj = new DynObj();
obj.date = "2019-02-26";
obj.stories = names;
string result0 = JsonConvert.SerializeObject(obj._values);

序列化后的结果如下:

{
"date": "2019-02-26",
"stories": ["a00", "b00", "c00", "d00"]
}


c# dynamic实现动态实体,不用定义实体就能序列化为标准json的更多相关文章

  1. C# Emit动态代理生成一个实体对象

    /// <summary> /// 使用Emit动态代理收集实体信息 /// </summary> /// <typeparam name="T"&g ...

  2. 【mybatis】mybatis使用java实体中定义的常量,或静态方法

    mybatis使用java实体中定义的常量 示例代码: <select id="findDealerInfo" parameterType="com.pisen.c ...

  3. 机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)

    刚刚开始接触三层的时候,我只做了两个登录小窗体的例子.画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西).不过,欠下的总要还的.在做机房重构的时候, ...

  4. Dynamic Resource – 动态资源

      Dynamic Resource – 动态资源 与Static Resource不同的是,Dynamic Resource可以在程序运行时重新评估/计算资源来生成对应的对象/值,它支持向前引用,只 ...

  5. springMVC接受对象实体并且对象实体里面又有对象集合方式

    springMVC接受对象实体并且对象实体里面又有对象集合方式: Ajax: function add(){ var orders = [ { orderNo : "H222255" ...

  6. WPF 用代码调用dynamic resource动态更改背景 - CSDN博客

    原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...

  7. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件

    为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...

  8. JS魔法堂:再识ASCII实体、符号实体和字符实体

    一.前言            相信大家都熟悉通过字符实体   来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢. 二.初识HTML实 ...

  9. org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '&' 后面

    错误信息如下:org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 ‘’&’’ 后面 出现这个错误的原因是在xml中使用&,实际上xml中不支 ...

随机推荐

  1. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  2. openpyxl代码案例

    import datetimefrom random import choicefrom time import timefrom openpyxl import load_workbookfrom ...

  3. 软件定义网络基础---SDN数据平面

    主要介绍SDN架构和转发模型 一:传统网络设备 (一)传统设备控制平面和数据平面 (二)数据平面的任务 数据平面对数据包的处理,主要通过查询由控制平面所生成的转发信息表来完成 (三)传统网络数据平面数 ...

  4. xml文档操作

    /** * */package com.gootrip.util; import java.io.ByteArrayOutputStream;import java.io.File;import ja ...

  5. 【428】Dijkstra 算法

    算法思想:(单源最短路径) 1个点到所有其他点的最短路径 查找顶点到其他顶点的最短路径,无法到达的记为+∞,找到最小的,就找到了最短路径的顶点 查看上一轮找到的最小点到达其他点的最小值,找到最短路径的 ...

  6. 基于Python的WEB接口开发与自动化测试 pdf(内含书签)

    基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...

  7. Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类

    Intellij IDEA集成mybatis-generator插件自动生成数据库实体操作类 转载至:https://blog.csdn.net/fishinhouse/article/details ...

  8. ubuntu18.04安装flat-remix-gnome主题

    flat-remix-gnome主题的github地址:https://github.com/daniruiz/flat-remix-gnome ubuntu下进行如下操作: sudo add-apt ...

  9. yarn那些事儿

    本篇文章立足于mac. 一.安装yarn 1.通过homebrew brew update brew install yarn 2.通过脚本 curl -o- -L https://yarnpkg.c ...

  10. QT学习之usb摄像头采集(Opencv+QT)[cvCapture,IplImage,QImage]

    参考自:http://blog.chinaunix.net/uid-23381466-id-3826748.html 将Opencv中的cvCaptureFromCAM不断获得摄像头采集到的图像数据, ...