zoukankan      html  css  js  c++  java
  • 组件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();
                }
            }

    转载自:http://www.aspnetjia.com

  • 相关阅读:
    Mybatis的分页查询
    Mybatis的动态标签
    mybatis include标签
    mybatis 的<![CDATA[ ]]>
    Mybatis 示例之 SelectKey(转)
    mybatis foreach标签
    加密解密
    Sensor传感器(摇一摇)
    二维码的生成和扫描
    Camera摄像头
  • 原文地址:https://www.cnblogs.com/aspnetjia/p/5211928.html
Copyright © 2011-2022 走看看