JSON序列化和反序列化(.NET)

本文介绍了JSON的基本概念及使用方式,包括其语法特点以及在.NET环境中进行序列化和反序列化的具体实现。通过实例展示了如何使用JavaScriptSerializer和DataContractJsonSerializer两种工具。
  JSON(JavaScript Object Notiation)是专门为浏览器中的网页上运行的 JavaScript 代码而设计的一种数据格式。它是在 Windows Communication Foundation (WCF) 中创建的 ASP.NET AJAX 服务所使用的默认数据格式

  JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。

  下面是一小段JSON代码:

{ " skillz " : { " web " :[ { " name " " html " ,  " years " " 5 "  }, { " name " " css " ,  " years " " 3 "  }], " database " :[ { " name " " sql " ,  " years " " 7 "  }]}}

JSON主要部分:

  花括弧,方括弧,冒号和逗号

  1. 花括弧表示一个“容器”
  2. 方括号装载数组
  3. 名称和值用冒号隔开
  4. 数组元素通过逗号隔开
 .NET中JSON的序列化和反序列化:

 1.序列化类

 JavaScriptSerializer

   命名空间  System.Web.Script.Serialization

  程序集  System.Web.Extensions(在 System.Web.Extensions.dll 中)
   DataContractJsonSerializer

   命名空间  System.Runtime.Serialization.Json

  程序集  System.Runtime.Serialization(在 System.Runtime.Serialization.dll 中)

2.示例代码

Model类:

namespace  Jeriffe.JsonSerializer
{
    [DataContract]
    
internal   class  Person
    {
        [DataMember]
        
public   string  Name {  get set ; }
        [DataMember]
        
public   int  Age {  get set ; }
    }
}

Client调用:

using  System;
using  System.Linq;
using  System.Text;
using  System.IO;
using  System.Collections.Generic;
using  System.Web.Script.Serialization;
using  System.Runtime.Serialization.Json;

namespace  Jeriffe.JsonSerializer
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {            
            Person p 
=   new  Person
            {
                Name 
=   " Jeriffe " ,
                Age 
=   42
            };
            DataContractJsonSerializer(p);

            JavaScriptJsonSerializer(p);

            Console.Read();
        }

        
private   static   void  JavaScriptJsonSerializer(Person p)
        {
            JavaScriptSerializer ser 
=   new  JavaScriptSerializer();
            
string  str  =  ser.Serialize(p);
            Console.WriteLine(
" JavaScriptSerializer --JSON form of Person object:  " );
            Console.WriteLine(str);

            Person newPerson 
=  ser.Deserialize < Person > (str);
            Console.WriteLine(
" JavaScriptSerializer --Deserialized back: " );
            Console.WriteLine(
" { " );
            Console.WriteLine(
"     Name:  "   +  newPerson.Name
                
+  Environment.NewLine  +   "     Age:  "   +  newPerson.Age);
            Console.WriteLine(
" } " );
        }

        
private   static   void  DataContractJsonSerializer(Person p)
        {
            
using  (MemoryStream ms  =   new  MemoryStream())
            {
                DataContractJsonSerializer ser 
=   new  DataContractJsonSerializer( typeof (Person));
                ser.WriteObject(ms, p);

                ms.Position 
=   0 ;
                StreamReader sr 
=   new  StreamReader(ms);
                Console.WriteLine(
" DataContractJsonSerializer --JSON form of Person object:  " );
                Console.WriteLine(sr.ReadToEnd());

                ms.Position 
=   0 ;
                Person newPerson 
=  ser.ReadObject(ms)  as  Person;
                Console.WriteLine(
" DataContractJsonSerializer --Deserialized back: " );
                Console.WriteLine(
" { " );
                Console.WriteLine(
"     Name:  "   +  newPerson.Name
                    
+  Environment.NewLine  +   "     Age:  "   +  newPerson.Age);
                Console.WriteLine(
" } " );
            }
        }

    }
}

转载于:https://www.cnblogs.com/jeriffe/articles/2084231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值