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.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;
        }
    }
}

拓展:点击打开链接

时间: 2024-11-16 03:09:19

C# 实体类序列化与反序列化二 (DataContractSerializer)的相关文章

C# 实体类序列化与反序列化一 (XmlSerializer)

/// <summary> /// 实体类序列化的反序列化的类 /// </summary> /// <typeparam name="T"></typeparam> public abstract class EntityClassXmlSerializer<T> { /// <summary> /// 实体类序列化成xml string /// </summary> /// <param na

spring mvc-springmvc中实体类序列化有什么意义

问题描述 springmvc中实体类序列化有什么意义 springMVC中实体类implements Serializable有什么意义 解决方案 这个和springmvc没有关系的. 首先为什么要实现这个Serializable呢? 序列化的意义就是可以把对象格式化成流对象从而可以用流将一个对象存入磁盘或者通过网络发送到 另外一台计算机上供其他程序使用. 现在使用java编写的网路应用可不要在网络间传递对象么 解决方案二: 这是为了方便在网络上传输啊,你的APP接收的数据肯定是要去查数据库,数

C# Json 序列化与反序列化二

/// <summary> /// 将对象转换为 JSON 字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public static string ScriptSerialize<T>

C#实现XML与实体类之间相互转换的方法(序列化与反序列化)_C#教程

本文实例讲述了C#实现XML与实体类之间相互转换的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Xml; using System.Xml.Serialization; /// <summary> /// Xml序列化与反序列化 //

利用特性(Attribute)对实体类进行验证

对于XML的内容,我这边的处理方式是将它反序列化成实体对象,毕竟操作一 个实体对象比一大堆的XPath强多了. .net framework自带的XML序列化和反序列化类 System.Xml.Serialization.XmlSerializer由于内部实现过于复杂,导致性能不 佳.我这边自己实现了一个XML反序列化类,性能虽好但比较有针对性,所以今 天还是以.net framework自带的XML反序列化类作为示范. 比如说一个XML的内容是这样: <? xml version = "

Socket网络编程学习笔记(5):发送和接收实体类数据

在前面讲述的篇幅中,发送的都是文本信息,我们只要通过Encoding中的几 个方法把文本转化成二进制数组就可以利用Socket来传输了,这对于一些基本的 信息传输能够得到满足,但对于一些复杂的消息交流,则有些"吃力 ".我们有时候会把一些信息封闭在一个类中,如果Socket能够传送类对 象,那么一些复杂的问题能够通过面向对象来解决了,即方便又安全.大家都知 道,要想在网络上传输信息,必须要经过序列化才行,所以在传送类对象时,首 选必须对该类对象进行序列化,才能够在网络上进行传输. 序列

ASP.NET JSON字符串与实体类的互转换的示例代码

 本篇文章主要是对ASP.NET JSON字符串与实体类的互转换的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 还是先封装一个类吧! 这个类网上都可以找到的!有个这个类,一切都将变得简单了,哈哈. 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serialization.Json; using Sys

java调用.net发布 的webservice,实体类怎么传

问题描述 java调用.net发布 的webservice,实体类怎么传 java调用.net发布 的webservice,实体类怎么传, 解决方案 哈哈,刚好之前我做个类似的项目,写了一个心得这个是传参数的,实体类实现序列化一样的 解决方案二: http://blog.csdn.net/qq_15002323/article/details/49020849

ASP.NET自带对象JSON字符串与实体类的转换_实用技巧

关于JSON的更多介绍,请各位自行google了解!如果要我写的话,我也是去Google后copy!嘿嘿,一直以来很想学习json,大量的找资料和写demo,总算有点了解! 切入正题! 还是先封装一个类吧! 这个类网上都可以找到的!有个这个类,一切都将变得简单了,哈哈. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serializ