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; } } }
c# 序列化、反序列化类 SerializableHelper。
最新推荐文章于 2023-02-20 14:53:07 发布