C#中序列化的使用总结


本文摘自PHP中文网,作者黄舟,侵删。

贴一下自己序列化的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

public class XMLUtil

    {

        /// <summary>

        /// XML & Datacontract Serialize & Deserialize Helper

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="serialObject"></param>

        /// <returns></returns>

        public static string Serializer<T>(T serialObject) where T : class

        {

            string result = string.Empty;

            using (MemoryStream mem = new MemoryStream())

            {

                using (XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8))

                {

                    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

                    ser.Serialize(writer, serialObject);

                    result = Encoding.UTF8.GetString(mem.ToArray());

                }

            }

            return result;

        }

 

        public static T Deserialize<T>(string str) where T : class

        {

            T result = null;

            using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(str)))

            {

                using (StreamReader streamReader = new StreamReader(memoryStream))

                {

                    System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));

                    result = (T)xmlSerializer.Deserialize(memoryStream);

                }

            }

            return result;

        }

    }

上面的写法持续序列化不会有内存溢出的性能问题,之前一直被告知直接引用公司某位老鸟封装好的dll来序列化,后来发现了老是出现内存溢出,贴一下它的错误写法,仅供吸取教训:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

public class XMLUtil

    {

        /// <summary>

        /// XML & Datacontract Serialize & Deserialize Helper

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="serialObject"></param>

        /// <returns></returns>

        public static string Serializer<T>(T serialObject) where T : class

        {

            //try

            //{

            XmlSerializer ser = new XmlSerializer(typeof(T));

            System.IO.MemoryStream mem = new MemoryStream();

            XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);

            ser.Serialize(writer, serialObject);

            writer.Close();

 

            return Encoding.UTF8.GetString(mem.ToArray());

            //}

            //catch (Exception ex)

            //{

            //    return null;

            //}

        }

 

        public static T Deserialize<T>(string str) where T : class

        {

            //try

            //{

            XmlSerializer mySerializer = new XmlSerializer(typeof(T));

            StreamReader mem2 = new StreamReader(

                    new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)),

                    System.Text.Encoding.UTF8);

 

            return (T)mySerializer.Deserialize(mem2);

            //}

            //catch (Exception)

            //{

            //    return null;

            //}

        }

 

        //public static string Json_SerializeObject(object value)

        //{

        //    return Newtonsoft.Json.JsonConvert.SerializeObject(value);

        //}

        //public static object Json_DeserializeObject(string value)

        //{

        //    return Newtonsoft.Json.JsonConvert.DeserializeObject(value);

        //}

        //public static T Json_DeserializeObject<T>(string value)

        //{

        //    return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(value);

        //}

    }

以上就是C#中序列化的使用总结的详细内容!

相关阅读 >>

c# invoke 和 begininvoke之间的区别详解

c#中强制转换与尝试转换的实现方法

asp.net在网站根目录下创建文件夹

.net core对mongodb执行多条件查询

总结.net如何获取当前路径的方法

.net中抽象类实现多态

如何使用c#自定义音乐播放器进度条的实例分析

c#之fastsocket实战项目的示例分享

c#线程控制的实例详解

windows登录功能使用c#实现的示例

更多相关阅读请进入《csharp》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...