c# 序列化、反序列化类 SerializableHelper。

来源:互联网 发布:广州用友软件 编辑:程序博客网 时间:2024/06/01 21:57
public class SerializableHelper { /// /// 序列化成一个字节数组 /// /// /// /// public static byte[] SerializeToBytes(T t) { MemoryStream mStream = new MemoryStream(); BinaryFormatter ser = new BinaryFormatter(); ser.Serialize(mStream, t); return mStream.ToArray(); } /// /// 序列化成一个字符串 /// /// /// /// 序列化代码 public static string SerializeToXml(T t) { try { XmlSerializer s = new XmlSerializer(typeof(T)); Stream stream = new MemoryStream(); s.Serialize(stream, t); stream.Seek(0, SeekOrigin.Begin); //这一点非常重要 否则无法读取 string strSource = ""; using (StreamReader reader = new StreamReader(stream)) { strSource = reader.ReadToEnd(); } return strSource; } catch { return null; } } public static string SerializeToJson(T t) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(t.GetType()); MemoryStream stream = new MemoryStream(); serializer.WriteObject(stream, t); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); return Encoding.UTF8.GetString(dataBytes); } /// /// xml 文件反序列化为泛型数组 /// /// /// /// public static T DeSerialize(FileInfo fi) { if (fi.Exists == false) return default(T); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); FileStream fs = fi.OpenRead(); T t; try { t = (T)xmlSerializer.Deserialize(fs); } finally { fs.Close(); } return t; } /// /// 字符串反序列化成一个类 /// /// /// public static T DeSerialize(string stringSource) { if (string.IsNullOrEmpty(stringSource)) return default(T); try { XmlSerializer x = new XmlSerializer(typeof(T)); Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(stringSource)); stream.Seek(0, SeekOrigin.Begin); object obj = x.Deserialize(stream); stream.Close(); return (T)obj; } catch { return default(T); } } public static T JsonDeSerialize(string jsonString) { if (string.IsNullOrEmpty(jsonString)) return default(T); try { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); return (T)serializer.ReadObject(mStream); } catch { return default(T); } } public static Dictionary DeSerialize(FileInfo fi) { if (fi.Exists == false) return default(Dictionary); FileStream fs = fi.OpenRead(); if (fs.Length == 0) return default(Dictionary); XmlReader reader = XmlReader.Create(fs); XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; if (wasEmpty) return default(Dictionary); Dictionary dic = new Dictionary(); while (reader.Read()) { if (reader.NodeType != XmlNodeType.Element) continue; if (reader.Name == "Root") continue; reader.ReadStartElement("Row"); reader.ReadStartElement("Key"); TKey key = (TKey)keySerializer.Deserialize(reader); reader.ReadEndElement(); reader.ReadStartElement("Value"); TValue value = (TValue)valueSerializer.Deserialize(reader); reader.ReadEndElement(); dic.Add(key, value); reader.ReadEndElement(); //reader.MoveToContent(); } return dic; } /// /// 序列化泛型数组为xml文件 /// /// /// /// /// 是否序列化成功 public static bool Serialize(T t, string FullName) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); TextWriter writer = new StreamWriter(FullName); try { xmlSerializer.Serialize(writer, t); return true; } catch { return false; } finally { writer.Close(); } } /// /// 序列化 Dictionary /// /// /// /// /// /// public static bool Serialize(Dictionary dic, string FullName) { try { System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings(); settings.Encoding = Encoding.UTF8; settings.Indent = true; settings.ConformanceLevel = ConformanceLevel.Fragment; XmlWriter writer = XmlWriter.Create(FullName, settings); XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); writer.WriteStartElement("Root"); foreach (KeyValuePair kv in dic) { writer.WriteStartElement("Row"); writer.WriteStartElement("Key"); KeySerializer.Serialize(writer, kv.Key); writer.WriteEndElement(); writer.WriteStartElement("Value"); ValueSerializer.Serialize(writer, kv.Value); writer.WriteEndElement(); writer.WriteEndElement(); } writer.WriteEndElement(); writer.Close(); return true; } catch { try { File.Delete(FullName); } catch { } return false; } } } [Serializable()] public class CollectionBase : CollectionBase where T : class { public CollectionBase() { } public CollectionBase(CollectionBase value) { this.AddRange(value); } public CollectionBase(T[] value) { this.AddRange(value); } /// /// 成员索引 /// /// /// public T this[int index] { get { return (this.List[index]) as T; } set { this.List[index] = value; } } /// /// 添加一个成员 /// /// /// public int Add(T model) { return this.List.Add(model); } /// /// 添加应用 /// /// public void AddRange(T[] value) { for (int i = 0; i < value.Length; i++) { this.Add(value[i]); } } public void AddRange(NewSkySoft.Common.CollectionBase value) { for (int i = 0; i < value.Count; i++) { this.Add((T)value.List[i]); } } /// /// 检查集合中是否包含某应用 /// /// /// public bool Contains(T value) { return base.List.Contains(value); } public void CopyTo(T[] array, int index) { base.List.CopyTo(array, index); } public new ApplicationCollectionEnumerator GetEnumerator() { return new ApplicationCollectionEnumerator(this); } public int IndexOf(T value) { return base.List.IndexOf(value); } public void Insert(int index, T value) { base.List.Insert(index, value); } /// /// 移除一个成员 /// /// public void Remove(T model) { this.List.Remove(model); } } public class ApplicationCollectionEnumerator : IEnumerator where T : class { private IEnumerator _enumerator; private IEnumerable _temp; public ApplicationCollectionEnumerator(CollectionBase mappings) { this._temp = mappings; this._enumerator = this._temp.GetEnumerator(); } public bool MoveNext() { return this._enumerator.MoveNext(); } public void Reset() { this._enumerator.Reset(); } bool IEnumerator.MoveNext() { return this._enumerator.MoveNext(); } void IEnumerator.Reset() { this._enumerator.Reset(); } public T Current { get { return (T)this._enumerator.Current; } } object IEnumerator.Current { get { return this._enumerator.Current; } } }
原创粉丝点击