C# 实体类序列化与反序列化二 (DataContractSerializer)

简介: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.IO;using System.Xml;namespace Common.Utility.XMLSerializatio
 
 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.IO;
using System.Xml;

namespace Common.Utility.XMLSerialization
{
    /// <summary>
    /// DataContractSerializer
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class DataContractSerializer<T>
    {
        /// <summary>
        /// 实体序列化成xml string
        /// </summary>
        /// <param name="meta"></param>
        /// <returns></returns>
        public static string ToXMLString(T meta)
        {
            DataContractSerializer dcs = new DataContractSerializer(typeof(T));
            string xmlStr = string.Empty;
            using (MemoryStream ms = new MemoryStream())
            {
                try
                {
                    dcs.WriteObject(ms, meta);
                    xmlStr = Encoding.UTF8.GetString(ms.ToArray());
                    ms.Close();
                }
                catch
                {
                    throw;
                }
            }
            return xmlStr;
        }
        /// <summary>
        /// DataContract序列化
        /// </summary>
        /// <param name="value"></param>
        /// <param name="knownTypes">已知类型的集合</param>
        /// <returns></returns>
        public static string ToXMLString(object value, IEnumerable<Type> knownTypes = null)
        {
            try
            {
                DataContractSerializer dataContractSerializer = new DataContractSerializer(value.GetType(), knownTypes);
                using (MemoryStream ms = new MemoryStream())
                {
                    dataContractSerializer.WriteObject(ms, value);
                    ms.Seek(0, SeekOrigin.Begin);
                    using (StreamReader sr = new StreamReader(ms))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
            catch
            {
                throw;
            }
        }
        /// <summary>
        /// 实体反序列化
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static T ReadFromXML(string xmlStr)
        {
            T meta;
            try
            {
                DataContractSerializer dcs = new DataContractSerializer(typeof(T));
                using (TextReader reader = new StringReader(xmlStr))
                {
                    using (XmlReader xReader = XmlReader.Create(reader))
                    {
                        meta = (T)dcs.ReadObject(xReader);
                    }
                }
            }
            catch
            {
                throw;
            }
            return meta;
        }

        /// <summary>
        /// 实体反序列化
        /// </summary>
        /// <param name="xmlStr"></param>
        /// <param name="knownTypes">IEnumerable<Type></param>
        /// <returns></returns>
        public static T ReadFromXML(string xmlStr, IEnumerable<Type> knownTypes = null)
        {
            T meta;
            try
            {
                DataContractSerializer dcs = new DataContractSerializer(typeof(T), knownTypes);
                using (TextReader reader = new StringReader(xmlStr))
                {
                    using (XmlReader xReader = XmlReader.Create(reader))
                    {
                        meta = (T)dcs.ReadObject(xReader);
                    }
                }
            }
            catch
            {
                throw;
            }
            return meta;
        }
    }
}


拓展:点击打开链接

目录
相关文章
|
18天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
28天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
28天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
27 0
|
2月前
|
存储 XML JSON
用示例说明序列化和反序列化
用示例说明序列化和反序列化
|
2月前
|
JSON 安全 编译器
扩展类实例的序列化和反序列化
扩展类实例的序列化和反序列化
35 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
202 3
|
22天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
30 3
|
2月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
45 2