当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 组件Newtonsoft.Json实现object2json转换

ASP.NET
asp.net 使用Silverlight操作ASPNETDB数据库
ASP.NET 前后台调用方法
ASP.NET中等安全模式的一些经验分享
asp.net 打印控件使用方法
网站开发技术:ASP.NET 2.0搭建网站
ASP.NET实例教程:创建数据透视表
ASP.NET 4进行SEO优化提高网站排名和权重
ASP.NET实例教程:订阅 GeoRSS 订阅源
ASP.NET页面间数据传递的9种方法
ASP.NET教程:网页表单多个按钮完成不同功能
Asp.net的服务器推技术 (Server Push)
asp.net 无刷新附件上传实现方法
ASP.NET 定制简单的错误处理页面实现代码
c# 在WebBrowser中用SendMessage模拟鼠标点击
asp.net 表单验证新思路
.NET从优酷专辑中采集所有视频及信息(VB.NET代码)
VS2005 水晶报表在时部署时遇到的问题
ASP.NET 输出图片简单代码
一天精通asp.net的学习经验小结
DataGridView中绑定DataTable数据及相关操作实现代码

ASP.NET 中的 组件Newtonsoft.Json实现object2json转换


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 119 ::
收藏到网摘: n/a

很多情况下,我们需要把数据类型做一些转换,供其它外部的子系统调用。

最为典型的是生成json格式供javascript作调用。

现成的组件Newtonsoft.Json可以实现object2json之间的转换。

Newtonsoft.Json.JavaScriptConvert.SerializeObject(object)可以执行json的序列化,也是反序列化的方法。

常见的场景:

A系统提供用户资料(MemberInfo)给子系统B调用,但用户资料中有些内容是不能公开的,如Email地址。

本文由软晨学习网(www.ruanchen.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();
            }
        }

这样就OK了。