组件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 ...
随机推荐
- WaterfallTree(瀑布树) 详细技术分析系列
前言 WaterfallTree(瀑布树) 是最强纯C#开源NoSQL和虚拟文件系统-STSdb专有的(版权所有/专利)算法/存储结构. 参考 关于STSdb,我之前写过几篇文章,譬如: STSdb, ...
- Field 'id' doesn't have a default value
首先原因在于没有设置主键自增长. mysql的自增长模式是IDENTITY. jpa标签: @Id @GeneratedValue(strategy=GenerationType.IDENTITY) ...
- PowerDesigner实用操作
1. 让PhysicalDiagram里的表显示字段名Tools→Display Preferences→在General Settings里选择Table→点击Advanced→选择Form下的Co ...
- IoC组件Unity再续~根据类型字符串动态生产对象
回到目录 这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者XML文件里,在使用 ...
- ECMAScript5中数组的方法
1.forEach()方法 遍历数组,为每个数组元素调用指定函数,三个参数分别为:数组元素 item.元素索引 index.数组本身 arr,无返回值 例: 2.map()方法 调用数组的每个元素传递 ...
- fir.im weekly - 「 持续集成 」实践教程合集
我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...
- btn css
.searchButtonBtn { border: 0; padding: 0 23px; height: 27px; line-height: 27px; cursor: pointer; bac ...
- Python字符进度条
Python字符进度条 看看这个神奇的module from tqdm import trange from time import sleep for r in trange(10, 1, -1): ...
- maven -- 学习笔记(四)实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)
Learn from:http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html,感谢楼主的分享,才有下面的这篇学习小结 一.环境准 ...
- golang在Windows下Sublime Text开发调试环境的配置
一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...