组件Newtonsoft.Json实现object2json转换
很多情况下,我们需要把数据类型做一些转换,供其它外部的子系统调用。
最为典型的是生成json格式供javascript作调用。
现成的组件Newtonsoft.Json可以实现object2json之间的转换。
Newtonsoft.Json.JavaScriptConvert.SerializeObject(object)可以执行json的序列化,也是反序列化的方法。
常见的场景:
A系统提供用户资料(MemberInfo)给子系统B调用,但用户资料中有些内容是不能公开的,如Email地址。
本文由网页教学网(www.webjx.com)发布!转载和采集的话请不要去掉!谢谢。
直接用Newtonsoft.Json.JavaScriptConvert.SerializeObject好像是不行的,它会把object中的所有属性列出。
我的做法是这样的:
定义一个特性类,该特性类只允许用于类的属性上
view plaincopy to clipboardprint?
[AttributeUsage(AttributeTargets.Property)]
public class DenyReflectionAttrubite : Attribute
{
public DenyReflectionAttrubite() { }
}
[AttributeUsage(AttributeTargets.Property)]
public class DenyReflectionAttrubite : Attribute
{
public DenyReflectionAttrubite() { }
}
MemberInfo类
view plaincopy to clipboardprint?
public class MemberInfo
{
public int Uid
{
get;
set;
}
public string UserName
{
get;
set;
}
public string NickName
{
get;
set;
}
[DenyReflectionAttrubite]
public string Password
{
get;
set;
}
[DenyReflectionAttrubite]
public string Email
{
get;
set;
}
//.......................
}
public class MemberInfo
{
public int Uid
{
get;
set;
}
public string UserName
{
get;
set;
}
public string NickName
{
get;
set;
}
[DenyReflectionAttrubite]
public string Password
{
get;
set;
}
[DenyReflectionAttrubite]
public string Email
{
get;
set;
}
//.......................
}
至于DenyReflectionAttrubite特性如何使用,下面就会提出。
json生成
view plaincopy to clipboardprint?
public void Builder()
{
using (jsonWriter = new JsonTextWriter(sw))
{
jsonWriter.Formatting = Formatting.None;
jsonWriter.Indentation = 4;
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("member");
jsonWriter.WriteStartArray();
jsonWriter.WriteStartObject();
Type settingsType = this.member.GetType();
foreach (PropertyInfo propertyInformation in settingsType.GetProperties())
{
try
{
//在这里对DenyReflectionAttrubite特性的属性跳过处理
if (propertyInformation.GetCustomAttributes(typeof(DenyReflectionAttrubite), false).Length > 0) continue;
object propertyValue = propertyInformation.GetValue(member, null);
string valueAsString = propertyValue.ToString();
if (propertyValue.Equals(null))
{
valueAsString = String.Empty;
}
if (propertyValue.Equals(Int32.MinValue))
{
valueAsString = String.Empty;
}
if (propertyValue.Equals(Single.MinValue))
{
valueAsString = String.Empty;
}
jsonWriter.WritePropertyName(propertyInformation.Name.ToLower());
jsonWriter.WriteValue(valueAsString.Trim());
}
catch { }
}
jsonWriter.WriteEndObject();
jsonWriter.WriteEnd();
jsonWriter.WriteEndObject();
}
}
public void Builder()
{
using (jsonWriter = new JsonTextWriter(sw))
{
jsonWriter.Formatting = Formatting.None;
jsonWriter.Indentation = 4;
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("member");
jsonWriter.WriteStartArray();
jsonWriter.WriteStartObject();
Type settingsType = this.member.GetType();
foreach (PropertyInfo propertyInformation in settingsType.GetProperties())
{
try
{
//在这里对DenyReflectionAttrubite特性的属性跳过处理
if (propertyInformation.GetCustomAttributes(typeof(DenyReflectionAttrubite), false).Length > 0) continue;
object propertyValue = propertyInformation.GetValue(member, null);
string valueAsString = propertyValue.ToString();
if (propertyValue.Equals(null))
{
valueAsString = String.Empty;
}
if (propertyValue.Equals(Int32.MinValue))
{
valueAsString = String.Empty;
}
if (propertyValue.Equals(Single.MinValue))
{
valueAsString = String.Empty;
}
jsonWriter.WritePropertyName(propertyInformation.Name.ToLower());
jsonWriter.WriteValue(valueAsString.Trim());
}
catch { }
}
jsonWriter.WriteEndObject();
jsonWriter.WriteEnd();
jsonWriter.WriteEndObject();
}
}
组件Newtonsoft.Json实现object2json转换的更多相关文章
- Newtonsoft.Json 把对象转换成json字符串
var resultJson = new { records = rowCount, page = pageindex, //总页数=(总页数+页大小-1)/页大小 total = (rowCount ...
- C#将集合和Json格式互相转换的几种方式
1.使用微软自带的System.Web.Extensions.dll转换,该DLL文件一般存在于如下路径:c:\Program Files\Reference Assemblies\Microsoft ...
- Newtonsoft.Json日期转换
在使用EasyUI做后台时,使用表格datagrid,用Newtonsoft.Json转换为Json格式后,时间显示为2013-06-15 T00:00:00形式. 后来研究了一下Newtonsoft ...
- Newtonsoft.Json转换强类型DataTable错误:Self referencing loop detected with type ......
问题,在使用Newtonsoft.Json对强类型的DataTable进行系列化时会出现循环引用错误 解决办法,不要直接系列化强类型的DataTable,改为 JsonConvert.Serializ ...
- Newtonsoft.Json 转换DateTime类型为字符串时,串内部会有一个T。解决方案
使用Newtonsoft.Json 转换DateTime类型时,若使用标准转换,则字符串内会有一个T(虽然再转换成DateTime没有问题). 若要转换成DateTime没有T,可以加上特性: pub ...
- Asp.Net中使用Newtonsoft.Json转换,读取,写入
using Newtonsoft.Json;using Newtonsoft.Json.Converters; //把Json字符串反序列化为对象目标对象 = JsonConvert.Deserial ...
- Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty
原文:Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty public class NullToEmptyStringResolver : De ...
- 【转载】 C#使用Newtonsoft.Json组件来反序列化字符串为对象
在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonCon ...
- 【转载】C#使用Newtonsoft.Json组件来序列化对象
在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonCon ...
随机推荐
- 网络异步编程(C#)团购课
新生命开发团队大石头讲解网络异步编程(C#) 内容:网络编程基础.IOCP.APM.SAEA 时长:2~3小时 价格:20元,20人及以上成团,http://item.taobao.com/item. ...
- Android中viewPager的一两点使用
Android中viewPager的一两点使用 viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用. 使用viewP ...
- redis数据结构整理(一)
摘要: 0.redis安装 1.redis的常用数据结构类型 1.1 String 1.2 List 1.3 Set 1.4 Sorted Set 1.5 Hash 2.redis是单进程单 ...
- 谈谈设计模式~原型模式(Prototype)
返回目录 原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例.被复制的实例就是我们所称的“原型”,这个原型是可定制的. 原型模式 ...
- Android开发学习之路-Palette颜色提取工具类使用
视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...
- 使用 flow.ci 实现 Android 自动化测试与持续集成
在上篇文章--如何实现 Android 应用的持续部署中,我们使用的是 flow.ci + Github + fir.im 实现 Android 应用的持续部署.对于 Android 开发者,他们可能 ...
- NET中Application,Session,Cookie,ViewState,Cache,Hidden 缓存机制 .
Application 1. Application用来保存所有用户共用的信息 2. 在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Ap ...
- ui-router带参数的ui-sref配置
ui-router带参数的ui-sref配置 路由 .state('app.user_edit', { url:'user/userid/:userid', templateUrl: 'compone ...
- 开发工程师面试的秘密( 整理自 Export C Programming )
开发工程师面试的秘密 因为打算转战linux平台,所以一直在配置自己喜欢的linux操作系统.同时在看那本<C 专家编程>,这本书主要是针对ANSI C 介绍的,所以和Linux(Unix ...
- MySQL的用户和权限介绍
一.关于MySQL权限的几点常识: 1.MySQL的权限系统主要用来验证用户的操作权限. 2.在MySQL内部,权限信息存放在MySQL数据库的granttable里.当mysql启动后,grantt ...