任意类型转换成json

项目中经常要用到json格式的数据,把收集和整理的转换json数据的方法发布如下:

在.net framework2.0中,没有JavaScriptSerializer(3.0) 和DataContractJsonSerializer (3.5),所以经常要用手写的转换类,这样调试也方便些,何况JavaScriptSerializer 和DataContractJsonSerializer 还有一些对特殊字符解析的bug

  ///   <summary>
    
///  List转成json 
    
///   </summary>
    
///   <typeparam name="T"></typeparam>
    
///   <param name="jsonName"></param>
    
///   <param name="list"></param>
    
///   <returns></returns>
     public   static   string  ListToJson < T > (IList < T >  list,  string  jsonName)
    {
        StringBuilder Json 
=   new  StringBuilder();
        
if  ( string .IsNullOrEmpty(jsonName))
            jsonName 
=  list[ 0 ].GetType().Name;
        Json.Append(
" {\ ""  + jsonName +  " \ " :[ " );
        
if  (list.Count  >   0 )
        {
            
for  ( int  i  =   0 ; i  <  list.Count; i ++ )
            {
                T obj 
=  Activator.CreateInstance < T > ();
                PropertyInfo[] pi 
=  obj.GetType().GetProperties();
                Json.Append(
" { " );
                
for  ( int  j  =   0 ; j  <  pi.Length; j ++ )
                {
                    Type type 
=  pi[j].GetValue(list[i],  null ).GetType();
                    Json.Append(
" \ ""  + pi[j].Name.ToString() +  " \ " : "   +  StringFormat(pi[j].GetValue(list[i],  null ).ToString(), type));

                    
if  (j  <  pi.Length  -   1 )
                    {
                        Json.Append(
" , " );
                    }
                }
                Json.Append(
" } " );
                
if  (i  <  list.Count  -   1 )
                {
                    Json.Append(
" , " );
                }
            }
        }
        Json.Append(
" ]} " );
        
return  Json.ToString();
    }

    
///   <summary>
    
///  List转成json 
    
///   </summary>
    
///   <typeparam name="T"></typeparam>
    
///   <param name="list"></param>
    
///   <returns></returns>
     public   static   string  ListToJson < T > (IList < T >  list)
    {
        
object  obj  =  list[ 0 ];
        
return  ListToJson < T > (list, obj.GetType().Name);
    }

    
///   <summary>  
    
///  对象转换为Json字符串 
    
///   </summary>  
    
///   <param name="jsonObject"> 对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToJson( object  jsonObject)
    {
        
string  jsonString  =   " { " ;
        PropertyInfo[] propertyInfo 
=  jsonObject.GetType().GetProperties();
        
for  ( int  i  =   0 ; i  <  propertyInfo.Length; i ++ )
        {
            
object  objectValue  =  propertyInfo[i].GetGetMethod().Invoke(jsonObject,  null );
            
string  value  =   string .Empty;
            
if  (objectValue  is  DateTime  ||  objectValue  is  Guid  ||  objectValue  is  TimeSpan)
            {
                value 
=   " ' "   +  objectValue.ToString()  +   " ' " ;
            }
            
else   if  (objectValue  is   string )
            {
                value 
=   " ' "   +  ToJson(objectValue.ToString())  +   " ' " ;
            }
            
else   if  (objectValue  is  IEnumerable)
            {
                value 
=  ToJson((IEnumerable)objectValue);
            }
            
else
            {
                value 
=  ToJson(objectValue.ToString());
            }
            jsonString 
+=   " \ ""  + ToJson(propertyInfo[i].Name) +  " \ " : "   +  value  +   " , " ;
        }
        jsonString.Remove(jsonString.Length 
-   1 , jsonString.Length);
        
return  jsonString  +   " } " ;
    }

    
///   <summary>  
    
///  对象集合转换Json 
    
///   </summary>  
    
///   <param name="array"> 集合对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToJson(IEnumerable array)
    {
        
string  jsonString  =   " [ " ;
        
foreach  ( object  item  in  array)
        {
            jsonString 
+=  ToJson(item)  +   " , " ;
        }
        jsonString.Remove(jsonString.Length 
-   1 , jsonString.Length);
        
return  jsonString  +   " ] " ;
    }

    
///   <summary>  
    
///  普通集合转换Json 
    
///   </summary>  
    
///   <param name="array"> 集合对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToArrayString(IEnumerable array)
    {
        
string  jsonString  =   " [ " ;
        
foreach  ( object  item  in  array)
        {
            jsonString 
=  ToJson(item.ToString())  +   " , " ;
        }
        jsonString.Remove(jsonString.Length 
-   1 , jsonString.Length);
        
return  jsonString  +   " ] " ;
    }

    
///   <summary>  
    
///  Datatable转换为Json 
    
///   </summary>  
    
///   <param name="table"> Datatable对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToJson(DataTable dt)
    {
        StringBuilder jsonString 
=   new  StringBuilder();
        jsonString.Append(
" [ " );
        DataRowCollection drc 
=  dt.Rows;
        
for  ( int  i  =   0 ; i  <  drc.Count; i ++ )
        {
            jsonString.Append(
" { " );
            
for  ( int  j  =   0 ; j  <  dt.Columns.Count; j ++ )
            {
                
string  strKey  =  dt.Columns[j].ColumnName;
                
string  strValue  =  drc[i][j].ToString();
                Type type 
=  dt.Columns[j].DataType;
                jsonString.Append(
" \ ""  + strKey +  " \ " : " );
                strValue 
=  StringFormat(strValue, type);
                
if  (j  <  dt.Columns.Count  -   1 )
                {
                    jsonString.Append(strValue 
+   " , " );
                }
                
else
                {
                    jsonString.Append(strValue);
                }
            }
            jsonString.Append(
" }, " );
        }
        jsonString.Remove(jsonString.Length 
-   1 1 );
        jsonString.Append(
" ] " );
        
return  jsonString.ToString();
    }

    
///   <summary>
    
///  DataTable转成Json 
    
///   </summary>
    
///   <param name="jsonName"></param>
    
///   <param name="dt"></param>
    
///   <returns></returns>
     public   static   string  ToJson(DataTable dt,  string  jsonName)
    {
        StringBuilder Json 
=   new  StringBuilder();
        
if  ( string .IsNullOrEmpty(jsonName))
            jsonName 
=  dt.TableName;
        Json.Append(
" {\ ""  + jsonName +  " \ " :[ " );
        
if  (dt.Rows.Count  >   0 )
        {
            
for  ( int  i  =   0 ; i  <  dt.Rows.Count; i ++ )
            {
                Json.Append(
" { " );
                
for  ( int  j  =   0 ; j  <  dt.Columns.Count; j ++ )
                {
                    Type type 
=  dt.Rows[i][j].GetType();
                    Json.Append(
" \ ""  + dt.Columns[j].ColumnName.ToString() +  " \ " : "   +  StringFormat(dt.Rows[i][j].ToString(), type));
                    
if  (j  <  dt.Columns.Count  -   1 )
                    {
                        Json.Append(
" , " );
                    }
                }
                Json.Append(
" } " );
                
if  (i  <  dt.Rows.Count  -   1 )
                {
                    Json.Append(
" , " );
                }
            }
        }
        Json.Append(
" ]} " );
        
return  Json.ToString();
    }

    
///   <summary>  
    
///  DataReader转换为Json 
    
///   </summary>  
    
///   <param name="dataReader"> DataReader对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToJson(DbDataReader dataReader)
    {
        StringBuilder jsonString 
=   new  StringBuilder();
        jsonString.Append(
" [ " );
        
while  (dataReader.Read())
        {
            jsonString.Append(
" { " );
            
for  ( int  i  =   0 ; i  <  dataReader.FieldCount; i ++ )
            {
                Type type 
=  dataReader.GetFieldType(i);
                
string  strKey  =  dataReader.GetName(i);
                
string  strValue  =  dataReader[i].ToString();
                jsonString.Append(
" \ ""  + strKey +  " \ " : " );
                strValue 
=  StringFormat(strValue, type);
                
if  (i  <  dataReader.FieldCount  -   1 )
                {
                    jsonString.Append(strValue 
+   " , " );
                }
                
else
                {
                    jsonString.Append(strValue);
                }
            }
            jsonString.Append(
" }, " );
        }
        dataReader.Close();
        jsonString.Remove(jsonString.Length 
-   1 1 );
        jsonString.Append(
" ] " );
        
return  jsonString.ToString();
    }

    
///   <summary>  
    
///  DataSet转换为Json 
    
///   </summary>  
    
///   <param name="dataSet"> DataSet对象 </param>  
    
///   <returns> Json字符串 </returns>  
     public   static   string  ToJson(DataSet dataSet)
    {
        
string  jsonString  =   " { " ;
        
foreach  (DataTable table  in  dataSet.Tables)
        {
            jsonString 
+=   " \ ""  + table.TableName +  " \ " : "   +  ToJson(table)  +   " , " ;
        }
        jsonString 
=  jsonString.TrimEnd( ' , ' );
        
return  jsonString  +   " } " ;
    }

    
///   <summary>
    
///  过滤特殊字符
    
///   </summary>
    
///   <param name="s"></param>
    
///   <returns></returns>
     private   static   string  String2Json(String s)
    {
        StringBuilder sb 
=   new  StringBuilder();
        
for  ( int  i  =   0 ; i  <  s.Length; i ++ )
        {
            
char  c  =  s.ToCharArray()[i];
            
switch  (c)
            {
                
case   ' \" ' :
                    sb.Append(
" \\\ "" ); break;
                 case   ' \\ ' :
                    sb.Append(
" \\\\ " );  break ;
                
case   ' / ' :
                    sb.Append(
" \\/ " );  break ;
                
case   ' \b ' :
                    sb.Append(
" \\b " );  break ;
                
case   ' \f ' :
                    sb.Append(
" \\f " );  break ;
                
case   ' \n ' :
                    sb.Append(
" \\n " );  break ;
                
case   ' \r ' :
                    sb.Append(
" \\r " );  break ;
                
case   ' \t ' :
                    sb.Append(
" \\t " );  break ;
                
default :
                    sb.Append(c); 
break ;
            }
        }
        
return  sb.ToString();
    }

    
///   <summary>
    
///  格式化字符型、日期型、布尔型
    
///   </summary>
    
///   <param name="str"></param>
    
///   <param name="type"></param>
    
///   <returns></returns>
     private   static   string  StringFormat( string  str, Type type)
    {
        
if  (type  ==   typeof ( string ))
        {
            str 
=  String2Json(str);
            str 
=   " \ ""  + str +  " \ "" ;
        }
        
else   if  (type  ==   typeof (DateTime))
        {
            str 
=   " \ ""  + str +  " \ "" ;
        }
        
else   if  (type  ==   typeof ( bool ))
        {
            str 
=  str.ToLower();
        }
        
return  str;
    }

 

你可能感兴趣的:(json)