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.序列化类:
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; }
}
}
{
[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("}");
}
}
}
}
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("}");
}
}
}
}