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);
相关推荐
序列化是将数据结构转换为JSON字符串的过程。在Python中,可以使用`json.dumps()`函数将字典或其他可哈希的数据类型转换为JSON格式的字符串。在Java中,`JSONObject.toString()`方法可以实现相似功能。 4. **反...
在这里,首先检查序列化字符串的前缀是否正确,然后反序列化为 `ArrayList`。接着遍历这个列表,为 `DataTable` 添加列(如果尚未添加),然后创建新的 `DataRow`,将字典中的键值对填充到这个行中,并将其添加到 `...
这个DLL文件是James Newton-King 开发的Json.NET库的实现部分,提供了丰富的功能来序列化和反序列化JSON对象,使得.NET开发者能够方便地在C#、VB.NET等语言中与JSON数据交互。 Json.NET 是一个高性能、完全托管的 ...
首先,将XML解析为一个`JsonNode`对象,然后序列化成JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; ObjectMapper xml...
C#提供了XmlSerializer类用于对象到XML的转换,以及反序列化回对象。 4. **模板引擎**:为了生成易于阅读的文档,工具可能需要使用模板引擎(如NVelocity或Razor)来格式化输出。开发者定义模板,将数据字典内容...
此外,`json-c`库还提供了其他API来操作JSON数组、添加/删除"名称/值"对、序列化和反序列化JSON对象等。开发人员可以通过这些API轻松地在C程序中构建、读取和修改JSON数据,实现数据交换和存储。 在使用`json-c`库...
7. **文件I/O操作**:学习如何使用FileStream、StreamReader/Writer进行文件读写,以及使用XML或JSON格式进行数据序列化和反序列化。 8. **委托与事件**:C#的事件模型基于委托,理解事件处理和事件发布机制,以及...
由于其语言无关性,JSON也被其他编程语言广泛支持,如Java、Python、C#等,都有相应的库或内置功能用于JSON的序列化和反序列化。 总的来说,JSON是现代Web应用和分布式系统中不可或缺的数据交换格式,它的简洁性和...
对于序列化,即把JavaScript对象或Python字典转换为JSON字符串,JavaScript提供了`JSON.stringify()`方法,Python则有`json.dumps()`函数。 JSON的一个显著优点是它的易读性和可解析性,这使得它在Web服务和客户端...
在实际应用中,Java开发者会使用JSON进行对象与JSON字符串之间的转换,例如序列化(将Java对象转化为JSON字符串)和反序列化(将JSON字符串还原为Java对象)。这在处理HTTP请求响应、保存配置文件或跨系统通信时特别...
7. **序列化与反序列化**:辅助类可能包含JSON或XML的序列化和反序列化方法,便于数据的保存和传输。 8. **日志记录**:日志辅助类可以帮助开发者记录程序运行时的信息,方便调试和问题排查。 9. **加密解密**:...
- **XML和JSON处理**:掌握如何序列化和反序列化对象到XML或JSON格式。 5. **异常处理**: - **try-catch块**:理解异常处理机制,学习如何捕获和处理运行时错误。 - **finally块**:学习在异常发生时仍需执行的...
9. **序列化与反序列化**:数据交换和持久化时,序列化和反序列化是常用技术,此库可能包含JSON、XML、二进制等形式的序列化和反序列化方法。 10. **异常处理**:良好的异常处理机制能提高代码的健壮性,类库可能...
- 当数据在客户端和服务器之间交换时,需要将对象序列化为字符串,然后在另一端反序列化回对象。C#中的`JsonConvert`类(来自Newtonsoft.Json库)可以方便地实现JSON的序列化和反序列化。 8. **异常处理**: - ...
10. **序列化与反序列化**:`SerializationUtils`可能用于将对象转换为JSON或XML格式,或者从这些格式恢复对象,这对于数据交换和持久化很有帮助。 11. **数学计算**:`MathUtils`可能包含一些数学运算函数,如求...
C#中的System.Text.Json或Newtonsoft.Json库可帮助我们将对象转换为字符串并在接收端反序列化回原对象。 4. **用户界面(UI)控件**:标签中提到的“控件”是指在用户界面上用于交互的元素。C#结合WPF(Windows ...
13. **Newtonsoft.Json**: 这是一个流行的第三方JSON库,提供序列化和反序列化JSON的能力,对于Web服务和数据交换非常有用。 14. **Autofac**: 一个依赖注入容器,有助于实现面向接口编程,提高代码可测试性和可...
C#提供了文件操作的功能,可以将联系人信息序列化为XML或JSON格式保存到文件,当程序重新启动时再反序列化恢复数据。 最后,系统设计还应考虑到错误处理和异常安全。例如,当用户尝试删除不存在的联系人或输入无效...
- **序列化和反序列化**:在JSON或XML序列化过程中,字符串键对应于XML节点或JSON键。 - **动态数据操作**:在运行时根据外部输入改变对象的状态。 7. **性能考虑**:虽然反射和表达式树提供了很大的灵活性,但...