您的位置:首页 > 编程语言 > C#

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

2015-09-14 19:26 471 查看
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;
}
}
}


拓展:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息