`
zxlyecf2
  • 浏览: 133161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#序列化字符串,对象,xml,json,集合数组,字典

    博客分类:
  • C#
阅读更多

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);

 

0
0
分享到:
评论

相关推荐

    JSON库使用DEMO

    序列化是将数据结构转换为JSON字符串的过程。在Python中,可以使用`json.dumps()`函数将字典或其他可哈希的数据类型转换为JSON格式的字符串。在Java中,`JSONObject.toString()`方法可以实现相似功能。 4. **反...

    C#中datatable序列化与反序列化实例分析

    在这里,首先检查序列化字符串的前缀是否正确,然后反序列化为 `ArrayList`。接着遍历这个列表,为 `DataTable` 添加列(如果尚未添加),然后创建新的 `DataRow`,将字典中的键值对填充到这个行中,并将其添加到 `...

    Newtonsoft.Json.dll

    这个DLL文件是James Newton-King 开发的Json.NET库的实现部分,提供了丰富的功能来序列化和反序列化JSON对象,使得.NET开发者能够方便地在C#、VB.NET等语言中与JSON数据交互。 Json.NET 是一个高性能、完全托管的 ...

    xml格式数据和json相互转换的源码

    首先,将XML解析为一个`JsonNode`对象,然后序列化成JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; ObjectMapper xml...

    数据字典生成工具源码 (c#)

    C#提供了XmlSerializer类用于对象到XML的转换,以及反序列化回对象。 4. **模板引擎**:为了生成易于阅读的文档,工具可能需要使用模板引擎(如NVelocity或Razor)来格式化输出。开发者定义模板,将数据字典内容...

    JSON-c语言开发指南

    此外,`json-c`库还提供了其他API来操作JSON数组、添加/删除"名称/值"对、序列化和反序列化JSON对象等。开发人员可以通过这些API轻松地在C程序中构建、读取和修改JSON数据,实现数据交换和存储。 在使用`json-c`库...

    c#入门经典(第四版)课后习题

    7. **文件I/O操作**:学习如何使用FileStream、StreamReader/Writer进行文件读写,以及使用XML或JSON格式进行数据序列化和反序列化。 8. **委托与事件**:C#的事件模型基于委托,理解事件处理和事件发布机制,以及...

    json(20210924214429)[定义].pdf

    由于其语言无关性,JSON也被其他编程语言广泛支持,如Java、Python、C#等,都有相应的库或内置功能用于JSON的序列化和反序列化。 总的来说,JSON是现代Web应用和分布式系统中不可或缺的数据交换格式,它的简洁性和...

    最新的JSON中文教程

    对于序列化,即把JavaScript对象或Python字典转换为JSON字符串,JavaScript提供了`JSON.stringify()`方法,Python则有`json.dumps()`函数。 JSON的一个显著优点是它的易读性和可解析性,这使得它在Web服务和客户端...

    json在java中的使用1

    在实际应用中,Java开发者会使用JSON进行对象与JSON字符串之间的转换,例如序列化(将Java对象转化为JSON字符串)和反序列化(将JSON字符串还原为Java对象)。这在处理HTTP请求响应、保存配置文件或跨系统通信时特别...

    100个C#辅助类

    7. **序列化与反序列化**:辅助类可能包含JSON或XML的序列化和反序列化方法,便于数据的保存和传输。 8. **日志记录**:日志辅助类可以帮助开发者记录程序运行时的信息,方便调试和问题排查。 9. **加密解密**:...

    初学C#百例

    - **XML和JSON处理**:掌握如何序列化和反序列化对象到XML或JSON格式。 5. **异常处理**: - **try-catch块**:理解异常处理机制,学习如何捕获和处理运行时错误。 - **finally块**:学习在异常发生时仍需执行的...

    C#实用类集-DotNet.Utilities

    9. **序列化与反序列化**:数据交换和持久化时,序列化和反序列化是常用技术,此库可能包含JSON、XML、二进制等形式的序列化和反序列化方法。 10. **异常处理**:良好的异常处理机制能提高代码的健壮性,类库可能...

    C#简易电话薄

    - 当数据在客户端和服务器之间交换时,需要将对象序列化为字符串,然后在另一端反序列化回对象。C#中的`JsonConvert`类(来自Newtonsoft.Json库)可以方便地实现JSON的序列化和反序列化。 8. **异常处理**: - ...

    c#常用類的說明,常用的

    10. **序列化与反序列化**:`SerializationUtils`可能用于将对象转换为JSON或XML格式,或者从这些格式恢复对象,这对于数据交换和持久化很有帮助。 11. **数学计算**:`MathUtils`可能包含一些数学运算函数,如求...

    在线客服&及时聊天C#源码

    C#中的System.Text.Json或Newtonsoft.Json库可帮助我们将对象转换为字符串并在接收端反序列化回原对象。 4. **用户界面(UI)控件**:标签中提到的“控件”是指在用户界面上用于交互的元素。C#结合WPF(Windows ...

    C#常用类库

    13. **Newtonsoft.Json**: 这是一个流行的第三方JSON库,提供序列化和反序列化JSON的能力,对于Web服务和数据交换非常有用。 14. **Autofac**: 一个依赖注入容器,有助于实现面向接口编程,提高代码可测试性和可...

    用c#编的小型通讯录系统

    C#提供了文件操作的功能,可以将联系人信息序列化为XML或JSON格式保存到文件,当程序重新启动时再反序列化恢复数据。 最后,系统设计还应考虑到错误处理和异常安全。例如,当用户尝试删除不存在的联系人或输入无效...

    将属性映射到字符串键

    - **序列化和反序列化**:在JSON或XML序列化过程中,字符串键对应于XML节点或JSON键。 - **动态数据操作**:在运行时根据外部输入改变对象的状态。 7. **性能考虑**:虽然反射和表达式树提供了很大的灵活性,但...

Global site tag (gtag.js) - Google Analytics