JSON

组件Newtonsoft.Json实现object2json转换

字号+ 作者:H5之家 来源:H5之家 2015-09-30 16:07 我要评论( )

.NET教程:组件Newtonsoft.Json实现object2json转换。很多情况下,我们需要把数据类型做一些转换,供其它外部的子系统调用。最为典型的是生成json格式供javascri

  很多情况下,我们需要把数据类型做一些转换,供其它外部的子系统调用。
  
  最为典型的是生成json格式供javascript作调用。
  
  现成的组件Newtonsoft.Json可以实现object2json之间的转换。
  
  Newtonsoft.Json.JavaScriptConvert.SerializeObject(object)可以执行json的序列化,也是反序列化的方法。
  
  常见的场景:
  
  A系统提供用户资料(MemberInfo)给子系统B调用,但用户资料中有些内容是不能公开的,如Email地址。
  
  本文由网页教学网()发布!转载和采集的话请不要去掉!谢谢。
  
  直接用Newtonsoft.Json.JavaScriptConvert.SerializeObject好像是不行的,它会把object中的所有属性列出。
  
  我的做法是这样的:
  
  定义一个特性类,该特性类只允许用于类的属性上
  
  viewplaincopytoclipboardprint?
  
  [AttributeUsage(AttributeTargets.Property)]
  
  publicclassDenyReflectionAttrubite:Attribute
  
  {
  
  publicDenyReflectionAttrubite(){}
  
  }
  
  [AttributeUsage(AttributeTargets.Property)]
  
  publicclassDenyReflectionAttrubite:Attribute
  
  {
  
  publicDenyReflectionAttrubite(){}
  
  }
  
  MemberInfo类
  
  viewplaincopytoclipboardprint?
  
  publicclassMemberInfo
  
  {
  
  publicintUid
  
  {
  
  get;
  
  set;
  
  }
  
  publicstringUserName
  
  {
  
  get;
  
  set;
  
  }
  
  publicstringNickName
  
  {
  
  get;
  
  set;
  
  }
  
  [DenyReflectionAttrubite]
  
  publicstringPassword
  
  {
  
  get;
  
  set;
  
  }
  
  [DenyReflectionAttrubite]
  
  publicstringEmail
  
  {
  
  get;
  
  set;
  
  }
  
  //.......................
  
  }
  
  publicclassMemberInfo
  
  {
  
  publicintUid
  
  {
  
  get;
  
  set;
  
  }
  
  publicstringUserName
  
  {
  
  get;
  
  set;
  
  }
  
  publicstringNickName
  
  {
  
  get;
  
  set;
  
  }
  
  [DenyReflectionAttrubite]
  
  publicstringPassword
  
  {
  
  get;
  
  set;
  
  }
  
  [DenyReflectionAttrubite]
  
  publicstringEmail
  
  {
  
  get;
  
  set;
  
  }
  
  //.......................
  
  }
  
  至于DenyReflectionAttrubite特性如何使用,下面就会提出。
  
  json生成
  
  viewplaincopytoclipboardprint?
  
  publicvoidBuilder()
  
  {
  
  using(jsonWriter=newJsonTextWriter(sw))
  
  {
  
  jsonWriter.Formatting=Formatting.None;
  
  jsonWriter.Indentation=4;
  
  jsonWriter.WriteStartObject();
  
  jsonWriter.WritePropertyName("member");
  
  jsonWriter.WriteStartArray();
  
  jsonWriter.WriteStartObject();
  
  TypesettingsType=this.member.GetType();
  
  foreach(PropertyInfopropertyInformationinsettingsType.GetProperties())
  
  {
  
  try
  
  {
  
  //在这里对DenyReflectionAttrubite特性的属性跳过处理
  
  if(propertyInformation.GetCustomAttributes(typeof(DenyReflectionAttrubite),false).Length>0)continue;
  
  objectpropertyValue=propertyInformation.GetValue(member,null);
  
  stringvalueAsString=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();
  
  }
  
  }
  
  publicvoidBuilder()
  
  {
  
  using(jsonWriter=newJsonTextWriter(sw))
  
  {
  
  jsonWriter.Formatting=Formatting.None;
  
  jsonWriter.Indentation=4;
  
  jsonWriter.WriteStartObject();
  
  jsonWriter.WritePropertyName("member");
  
  jsonWriter.WriteStartArray();
  
  jsonWriter.WriteStartObject();
  
  TypesettingsType=this.member.GetType();
  
  foreach(PropertyInfopropertyInformationinsettingsType.GetProperties())
  
  {
  
  try
  
  {
  
  //在这里对DenyReflectionAttrubite特性的属性跳过处理
  
  if(propertyInformation.GetCustomAttributes(typeof(DenyReflectionAttrubite),false).Length>0)continue;
  
  objectpropertyValue=propertyInformation.GetValue(member,null);
  
  stringvalueAsString=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();
  
  }
  
  }
  
  这样就OK了。
  
  点这里查看更多.NET教程

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评