1.对象和xml的序列化和反序列化:
先随便建一个实体类
public class Person
{
public Person()
{
}
public Person(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
public DateTime LastLoginTime { get; set; }
public List<Course> Courses = new List<Course>();
}
public class Course
{
public Course()
{
}
public Course(string name, string description)
{
Name = name;
Description = description;
}
public string Name
{
get;
set;
}
public string Description
{
get;
set;
}
}
??对象和xml序列化和反序列化方法
/// <summary>
/// 序列化
/// </summary>
/// <param name="filePath"></param>
public static void Serialiaze(String filePath)
{
Person c = new Person("James Chen",35);
c.Courses.Add(new Course("高等数学", "思维工具"));
c.Courses.Add(new Course("大学英语", "交流工具"));
c.Courses.Add(new Course("离散数学", "计算机理论"));
XmlSerializer xs = new XmlSerializer(typeof(Person));
Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
xs.Serialize(stream, c);
stream.Close();
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="filePath"></param>
public static void Deserialize(String filePath)
{
XmlSerializer xs = new XmlSerializer(typeof(Person));
Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Person p = (Person)xs.Deserialize(stream);
stream.Close();
}
?调用方法
string path = Server.MapPath("upload/test.xml");
Serializer.Serialiaze(path);
Serializer.Deserialize(path);
?
2.字符串和对象的序列化和反序列化
/// <summary>
/// 序列化 对象到字符串
/// </summary>
/// <param name="obj">泛型对象</param>
/// <returns>序列化后的字符串</returns>
public static string Serialize<T>(T obj)
{
try
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Flush();
stream.Close();
return Convert.ToBase64String(buffer);
}
catch (Exception ex)
{
throw new Exception("序列化失败,原因:" + ex.Message);
}
}
/// <summary>
/// 反序列化 字符串到对象
/// </summary>
/// <param name="obj">泛型对象</param>
/// <param name="str">要转换为对象的字符串</param>
/// <returns>反序列化出来的对象</returns>
public static T Desrialize<T>(T obj, string str)
{
try
{
obj = default(T);
IFormatter formatter = new BinaryFormatter();
byte[] buffer = Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream(buffer);
obj = (T)formatter.Deserialize(stream);
stream.Flush();
stream.Close();
}
catch (Exception ex)
{
throw new Exception("反序列化失败,原因:" + ex.Message);
}
return obj;
}
?调用方法
//序列化
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Rows.Add(new object[] { 1, "first" });
dt.Rows.Add(new object[] { 2, "second" });
string result = SerializeUtilities.Serialize(dt);
Response.Write(result);
//反序列化
string mystr = result;
DataTable _resDT = new DataTable();
_resDT = (DataTable)SerializeUtilities.Desrialize(_resDT, mystr);
Response.Write("<br>反序列化结果<br>" + _resDT.Rows[0][0].ToString() + ":" + _resDT.Rows[0][1].ToString() + "<br>");
Response.Write(_resDT.Rows[1][0].ToString() + ":" + _resDT.Rows[1][1].ToString() + "<br>");
?
3.JSON序列化和反序列化的处理
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializerM<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换Json的Date字符串
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserializeM<T>(string jsonString)
{
//将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
/// <summary>
/// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = string.Empty;
DateTime dt = new DateTime(1970, 1, 1);
return result;
}
/// <summary>
/// 将时间字符串转为Json时间
/// </summary>
private static string ConvertDateStringToJsonDate(Match m)
{
string result = string.Empty;
DateTime dt = DateTime.Parse(m.Groups[0].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
return result;
}
?调用代码
Person p = new Person();
p.Name = "张三";
p.LastLoginTime = DateTime.Now;
p.Age = 28;
string jsonString = JsonSerializeHelper.JsonSerializer<Person>(p);
Response.Write(jsonString);
Person pe = JsonSerializeHelper.JsonDeserialize<Person>(jsonString);
///JSON序列化和反序列化日期时间的处理
Person p2 = new Person();
p2.Name = "张三";
p2.Age = 28;
p2.LastLoginTime = DateTime.Now;
string jsonString2 = JsonSerializeHelper.JsonSerializerM<Person>(p);
Person pe2 = JsonSerializeHelper.JsonDeserializeM<Person>(jsonString);
///JSON序列化和反序列化集合、字典、数组的处理
List<Person> list = new List<Person>()
{
new Person(){ Name="张三", Age=28,LastLoginTime = DateTime.Now},
new Person(){ Name="李四", Age=25,LastLoginTime = DateTime.Now}
};
string jsonString3 = JsonSerializeHelper.JsonSerializer<List<Person>>(list);
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("Name", "张三");
dic.Add("Age", "28");
string jsonString4 = JsonSerializeHelper.JsonSerializer<Dictionary<string, string>>(dic);
?