在C#中使用JSON的序列化和反序列化主要有三種方式:
json
1.使用DataContractJsonSerializer類
框架
2.使用JavaScriptSerializer類
ide
3.使用JSON.NET類庫
性能
DataContractJsonSerializer類幫助咱們序列化和反序列化Json,他在程序集 System.Runtime.Serialization.dll下的System.Runtime.Serialization.Json命名空間裏。此方法經常使用於在一些舊版本的.net框架中,如3.0,3.5等。spa
建立一個JSON幫助類.net
using System.IO;
code
using System.Runtime.Serialization.Json;
orm
using System.Text;
對象
namespace Dockty.Data
blog
{
public static class JsonHelper<T>
{
static JsonHelper()
{ }
/// <summary>
/// 序列化爲JSON對象
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string WriteObject(T obj)
{
var serializer = new DataContractJsonSerializer(typeof(T));
var mstream = new MemoryStream();
serializer.WriteObject(mstream, obj);
byte[] Bytes = new byte[mstream.Length];
mstream.Position = 0;
mstream.Read(Bytes, 0, (int)mstream.Length);
return Encoding.UTF8.GetString(Bytes);
}
/// <summary>
/// JSON對象反序列化
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static T ReadObject(string data)
{
var mstream = new MemoryStream(Encoding.UTF8.GetBytes(data));
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(mstream);
}
}
}
使用
ArtTags tags = new ArtTags() { ArtID = 1, ID = 1, TagID = 1 }; //序列化string strTags = JsonHelper<ArtTags>.WriteObject(tags); //反序列化ArtTags newTags = JsonHelper<ArtTags>.ReadObject(strTags);
//-----------------------------------------------------------------------------------------
//使用JavaScriptSerializer方式須要引入的命名空間,這個在程序集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
//----------------------------------------------------------------------------------------
#region 2.JavaScriptSerializer方式實現序列化和反序列化
Student stu = new Student()
{
ID = 1,
Name = "關羽",
Age = 2000,
Sex = "男"
};
JavaScriptSerializer js = new JavaScriptSerializer();
string jsonData = js.Serialize(stu);//序列化
Console.WriteLine(jsonData);
////反序列化方式一:
string desJson = jsonData;
//Student model = js.Deserialize<Student>(desJson);// //反序列化
//string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);
//Console.WriteLine(message);
//Console.ReadKey();
////反序列化方式2
dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
string messageDy = string.Format("動態的反序列化,ID={0},Name={1},Age={2},Sex={3}",
modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//這裏要使用索引取值,不能使用對象.屬性
Console.WriteLine(messageDy);
Console.ReadKey();
#endregion
//使用Json.NET類庫須要引入的命名空間
//-----------------------------------------------------------------------------
using Newtonsoft.Json;
//-------------------------------------------------------------------------
#region 3.Json.NET序列化
List<Student> lstStuModel = new List<Student>()
{
new Student(){ID=1,Name="張飛",Age=250,Sex="男"},
new Student(){ID=2,Name="潘金蓮",Age=300,Sex="女"}
};
//Json.NET序列化
string jsonData = JsonConvert.SerializeObject(lstStuModel);
Console.WriteLine(jsonData);
Console.ReadKey();
//Json.NET反序列化
string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";
Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化
Console.WriteLine(string.Format("反序列化:ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));
Console.ReadKey();
#endregion
在使用的簡潔性及性能來看都是最後一種方法是最好的,不過有時咱們面向使用一些很是古老的項目的時候就可能須要使用到第一種方法DataContractJsonSerializer。