简单实体Json序列化(输出JSON的属性可变)

一、先看效果

可以看出 , 我们在序列化一个对像时, 只给出了 我们想要 输出的两个字段名,  实际实体有5个属性, 经过可变属性序列化后的JSON 结果,也是我们想要的。

二、正式上程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Script.Serialization; namespace TaskConsoleApplication
{
class Program
{
static void Main(string[] args)
{ var p = new Person { Age = , Name = "jinshuai", Meney = , Tex = , Berthday = DateTime.Now }; var s = new PropertyVariableJsonSerializer(); var result = s.Serialize<Person>(p, new List<string>() { "Name", "Age" }); Console.WriteLine(result); Console.WriteLine("----------------------------"); Console.Read(); }
}
   public class Person
{
public string Name { get; set; } public int Age { get; set; } public double Meney { get; set; } public double Tex { get; set; } public DateTime Berthday { get; set; } }
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization; namespace TaskConsoleApplication
{ /// <summary>
///简单实体 可变属性序列化器
/// </summary>
public class PropertyVariableJsonSerializer
{
readonly JavaScriptSerializer _serializer = new JavaScriptSerializer(); /// <summary>
/// json 序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="propertys"></param>
/// <returns></returns>
public string Serialize<T>(T obj,List<string> propertys)
{
_serializer.RegisterConverters(new[] { new PropertyVariableConveter(typeof(T), propertys) }); return _serializer.Serialize(obj); }
} public class PropertyVariableConveter : JavaScriptConverter
{
private readonly List<Type> _supportedTypes = new List<Type>(); public PropertyVariableConveter(Type supportedType, List<string> propertys)
{
_supportedTypes.Add(supportedType);
Propertys = propertys; } private List<string> Propertys { get; set; } public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{ throw new Exception(" 这个暂时不支持 , 谢谢 "); } public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var dic = new Dictionary<string, object>(); var t = obj.GetType();
var properties= t.GetProperties(); foreach (var ite in properties)
{
string key = ite.Name;
var v = t.GetProperty(key).GetValue(obj, null); if (Propertys == null || Propertys.Count<=)
{
dic.Add(key, v);
continue;
} if (Propertys.Contains(key))
{
dic.Add(key, v);
}
} return dic; } public override IEnumerable<Type> SupportedTypes
{
get { return _supportedTypes; }
}
}
}

嗯。 就这些吧。 只是玩玩而以。

这次 源代码 就不上了。

附:

使用 JavaScriptConverter 类可以为 JavaScriptSerializer 类本身不支持的托管类型实现序列化和反序列化进程。此外,如果需要对序列化和反序列化进程进行更多控制,还可以使用 JavaScriptConverter。

SupportedTypes 属性指示自定义转换器为其提供转换器服务的类型。

若要指示 JavaScriptSerializer 实例必须使用自定义转换器,必须向该实例注册该转换器。如果要直接使用 JavaScriptSerializer 类,则应使用RegisterConverters 方法注册该转换器。否则,如果要从 ECMAScript (JavaScript) 调用 Web 方法并且希望使用自定义转换器,则可以通过在配置文件中添加 converters 元素来注册该转换器。有关详细信息,请参阅How to: Configure ASP.NET Services in Microsoft Ajax

当 JavaScriptSerializer 实例序列化自身注册有自定义转换器的类型时,序列化程序将调用 Serialize 方法。同样,如果 JavaScriptSerializer 实例正在反序列化 JavaScript 对象符号 (JSON) 字符串并且识别出该 JSON 字符串中的某个类型具有与其关联的自定义转换器,序列化程序也将调用Deserialize 方法。

  名称 说明
JavaScriptConverter()

初始化 JavaScriptConverter 类的新实例。

属性

 
 
  名称 说明
SupportedTypes

当在派生类中重写时,获取受支持类型的集合。

方法

 
 
  名称 说明
Deserialize(IDictionary<String, Object>, Type, JavaScriptSerializer)

当在派生类中重写时,将所提供的字典转换为指定类型的对象。

Equals(Object)

确定指定的对象是否等于当前对象。(从 Object 继承。)

Finalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(从 Object 继承。)

GetHashCode()

作为默认哈希函数。(从 Object 继承。)

GetType()

获取当前实例的 Type。(从 Object 继承。)

MemberwiseClone()

创建当前 Object 的浅表副本。(从 Object 继承。)

Serialize(Object, JavaScriptSerializer)

当在派生类中重写时,生成名称/值对的字典。

ToString()

返回表示当前对象的字符串。(从 Object 继承。)

这次够 150 字了吧。

简单实体Json序列化(输出JSON的属性可变)的更多相关文章

  1. SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    前言 这问题着实让人苦不堪言,有必要把它记下了. @JsonBackReference [亲测有效] 1.使用注解@JsonBackReference标记在有关联关系的实体属性上 2.仅导入此注解类有 ...

  2. C# 利用Newtonsoft.Json 序列化生成Json数据

    现在需要将一些数据转化成json格式返回给调用者, 使用Newtonsoft.Json.DLL库来帮助我们序列化 举例: {"300033":{"MC":&qu ...

  3. C#中的二进制序列化和Json序列化

    序列化就是把一个对象变成流的形式,方便传输和还原.小弟不才,总结下对二进制序列化和Json序列化的使用: 1.首先,二进制序列化(BinaryFormatter)要求要序列化的类必须是可序列化的(即在 ...

  4. 序列化模块— json模块,pickle模块,shelve模块

    json模块 pickle模块 shelve模块 序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网 ...

  5. ASP输出JSON数据及客户端jQuery处理方法

    首先ASP处理JSON需要json官方提供的JSON For ASP 封装类文件,下载地址:http://code.google.com/p/aspjson/downloads/list 下载最新的J ...

  6. day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)

    1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...

  7. json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式

     JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...

  8. 2019-7-18 collections,time,random,os,sys,序列化模块(json和pickle)应用

    一.collections模块 1.具名元组:namedtuple(生成可以使用名字来访问元素的tuple) 表示坐标点x为1  y为2的坐标 注意:第二个参数可以传可迭代对象,也可以传字符串,但是字 ...

  9. jquey中json字符串与json的转换(转)

    <!doctype html> <html> <head> <meta charset="utf-8"> <script sr ...

随机推荐

  1. NOIP2007 字符串展开

    .字符串的展开 (expand.pas/c/cpp) [问题描述] 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子 ...

  2. 浏览器中显示视频,flash等的代码处理

    window.flashView=function(flash_url){ var html=''; html+='<div id="obj_flash_div">'; ...

  3. 使用Mono Cecil 动态获取运行时数据 (Atribute形式 进行注入 用于写Log) [此文报考 xxx is declared in another module and needs to be imported的解决方法]-摘自网络

    目录 一:普通写法 二:注入定义 三:Weave函数 四:参数构造 五:业务编写 六:注入调用 7.  怎么调用别的程序集的方法示例 8. [is declared in another module ...

  4. Memcached使用笔记

    1.linux启动memcached命令 进入到memcached安装目录,可以用whereis memcached查看,默认安装在/usr/bin/目录下 输入以下命令,下面两行任选一行就可以了 m ...

  5. Android实例-操作摄像头(XE8+小米2)

    结果: 1.同样是照相,自己的程序设置为高质量时刷新慢,而小米手机的相机那真心反映快呀. 2.就算我设置为最高质量,可相片也没有小米手机的相片大.我最大是2000*1000,而小米可以做到3000*2 ...

  6. eclipse快捷键补充

    编辑相关快捷键 注释          Ctrl + / 快速修复    Ctrl + 1 删除当前行 Ctrl + d 格式化文档 Ctrl + Shift + f 插入空行    Shift + ...

  7. SQL 正则表达式使模式匹配和数据提取变得更容易

    SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...

  8. CAS总结之Ticket篇

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. iOS开发笔记系列-基础1(数据类型与表达式)

    学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...

  10. hdu 5432 Pyramid Split 二分

    Pyramid Split Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/conte ...