DataContractJsonSerializer 类 操作json类型数据

将对象序列化为 JavaScript 对象表示法 (JSON),并将 JSON 数据反序列化为对象。 此类不能继承。

//  msdn 例子:

复制代码
namespace  SL_DataContractJsonSerializer
{
    
public   partial   class  Page : UserControl
    {
        
public  Page()
        {
            InitializeComponent();
        }

        
// This uses an event handler, not SL data binding
         void  OnClick( object  sender, EventArgs args)
        {
            txtOutput1.Text 
=   " Create a User object and serialize it. " ;
            
string  json  =  WriteFromObject();
            txtOutput2.Text 
=  json.ToString();  //  Displays: {"Age":42,"Name":"Bob"}

            txtOutput3.Text 
=   " Deserialize the data to a User object. " ;
            
string  jsonString  =   " {'Name':'Bill', 'Age':53} " ;
            User deserializedUser 
=  ReadToObject(jsonString);
            txtOutput4.Text 
=  deserializedUser.Name;  //  Displays: Bill
            txtOutput5.Text  =  deserializedUser.Age.ToString();  //  Displays: 53
        }
        
//  Create a User object and serialize it to a JSON stream.
         public   static   string  WriteFromObject()
        {
            
// Create User object.
            User user  =   new  User( " Bob " 42 );

            
// Create a stream to serialize the object to.
            MemoryStream ms  =   new  MemoryStream();

            
//  Serializer the User object to the stream.
            DataContractJsonSerializer ser  =   new  DataContractJsonSerializer( typeof (User));
            ser.WriteObject(ms, user);
            
byte [] json  =  ms.ToArray();
            ms.Close();
            
return  Encoding.UTF8.GetString(json,  0 , json.Length);

        }

        
//  Deserialize a JSON stream to a User object.
         public   static  User ReadToObject( string  json)
        {
            User deserializedUser 
=   new  User();
            MemoryStream ms 
=   new  MemoryStream(Encoding.UTF8.GetBytes(json));
            DataContractJsonSerializer ser 
=   new  DataContractJsonSerializer(deserializedUser.GetType());
            deserializedUser 
=  ser.ReadObject(ms)  as  User;
            ms.Close();
            
return  deserializedUser;
        }

    }

    [DataContract]
    
public   class  User
    {
        [DataMember]
        
public   string  Name {  get set ; }

        [DataMember]
        
public   int  Age {  get set ; }

        
public  User() { }

        
public  User( string  newName,  int  newAge)
        {
            Name 
=  newName;
            Age 
=  newAge;
        }

    }

}

复制代码


 可以抽象成如下类:

复制代码
  public   class  JsonHelper
    {
        
///   <summary>
        
///  生成Json格式
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="obj"></param>
        
///   <returns></returns>
         public   static   string  GetJson < T > (T obj)
        {
            DataContractJsonSerializer json 
=   new  DataContractJsonSerializer(obj.GetType());
            
using  (MemoryStream stream  =   new  MemoryStream())
            {
                json.WriteObject(stream, obj);
                
string  szJson  =  Encoding.UTF8.GetString(stream.ToArray()); 
                
return  szJson;
            }
        }
        
///   <summary>
        
///  获取Json的Model
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="szJson"></param>
        
///   <returns></returns>
         public   static  T ParseFromJson < T > ( string  szJson)
        {
            T obj 
=  Activator.CreateInstance < T > ();
            
using  (MemoryStream ms  =   new  MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer serializer 
=   new  DataContractJsonSerializer(obj.GetType());
                
return  (T)serializer.ReadObject(ms);
            }
        }
    }
复制代码
复制代码
         ///   <summary>
        
///  反回JSON数据到前台
        
///   </summary>
        
///   <param name="dt"> 数据表 </param>
        
///   <returns> JSON字符串 </returns>
         public   string  DataTableToJson(DataTable dt)
        {
            StringBuilder JsonString 
=   new  StringBuilder();
            
if  (dt  !=   null   &&  dt.Rows.Count  >   0 )
            {
                JsonString.Append(
" " );
                JsonString.Append(
" \ " TableInfo\ " :[  " );
                
for  ( int  i  =   0 ; i  <  dt.Rows.Count; i ++ )
                {
                    JsonString.Append(
" " );
                    
for  ( int  j  =   0 ; j  <  dt.Columns.Count; j ++ )
                    {
                        
if  (j  <  dt.Columns.Count  -   1 )
                        {
                            JsonString.Append(
" \ ""  + dt.Columns[j].ColumnName.ToString() +  " \ " : "   +   " \ ""  + dt.Rows[i][j].ToString() +  " \ " , " );
                        }
                        
else   if  (j  ==  dt.Columns.Count  -   1 )
                        {
                            JsonString.Append(
" \ ""  + dt.Columns[j].ColumnName.ToString() +  " \ " : "   +   " \ ""  + dt.Rows[i][j].ToString() +  " \ "" );
                        }
                    }
                    
if  (i  ==  dt.Rows.Count  -   1 )
                    {
                        JsonString.Append(
" " );
                    }
                    
else
                    {
                        JsonString.Append(
" },  " );
                    }
                }
                JsonString.Append(
" ]} " );
                
return  JsonString.ToString();
            }
            
else
            {
                
return   null ;
            }
        }
复制代码

//还有一种方式操作json类型数据:

复制代码
public   static   class  JsonTableHelper
    {
        
///   <summary>  
        
///  返回对象序列化 
        
///   </summary>  
        
///   <param name="obj"> 源对象 </param>  
        
///   <returns> json数据 </returns>  
         public   static   string  ToJson( this   object  obj)
        {
            JavaScriptSerializer serialize 
=   new  JavaScriptSerializer();
            
return  serialize.Serialize(obj);
        }

        
///   <summary>  
        
///  控制深度 
        
///   </summary>  
        
///   <param name="obj"> 源对象 </param>  
        
///   <param name="recursionDepth"> 深度 </param>  
        
///   <returns> json数据 </returns>  
         public   static   string  ToJson( this   object  obj,  int  recursionDepth)
        {
            JavaScriptSerializer serialize 
=   new  JavaScriptSerializer();
            serialize.RecursionLimit 
=  recursionDepth;
            
return  serialize.Serialize(obj);
        }

        
///   <summary>  
        
///  DataTable转为json 
        
///   </summary>  
        
///   <param name="dt"> DataTable </param>  
        
///   <returns> json数据 </returns>  
         public   static   string  ToJson(DataTable dt)
        {
            Dictionary
< string object >  dic  =   new  Dictionary < string object > ();

            
int  index  =   0 ;
            
foreach  (DataRow dr  in  dt.Rows)
            {
                Dictionary
< string object >  result  =   new  Dictionary < string object > ();

                
foreach  (DataColumn dc  in  dt.Columns)
                {
                    result.Add(dc.ColumnName, dr[dc].ToString());
                }
                dic.Add(index.ToString(), result);
                index
++ ;
            }
            
return  ToJson(dic);
        }
    }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值