翔如菲菲

其实天很蓝,阴云总会散;其实海不宽,此岸连彼岸.

导航

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

  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 { getset; }
        [DataMember]
        
public int Age { getset; }
    }
}

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(
"}");
            }
        }

    }
}

posted on 2011-06-18 15:06  翔如飞飞  阅读(298)  评论(0编辑  收藏  举报