/// <summary>
/// 支持序列化的對象基類
/// </summary>
[Serializable]
public class LibSerializationObject : ISerializable, IDeserializationCallback
{
#region 構造函數
/// <summary>
/// 構造函數
/// </summary>
public LibSerializationObject()
{
}
#endregion
#region 序列化相關方法成員
/// <summary>
/// 構造函數
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
public LibSerializationObject(SerializationInfo info, StreamingContext context)
{
}
/// <summary>
///
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
}
#endregion
#region 序列化值獲取相關方法
/// <summary>
/// 獲取SerializationInfo中的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="type">值類型</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public object GetObjectValue(SerializationInfo info, string propertyName, Type type, object defaultValue)
{
object objResult = defaultValue;
PropertyInfo propertyInfo = info.GetType().GetProperty("MemberNames", BindingFlags.NonPublic | BindingFlags.Instance);
if (propertyInfo != null)
{
string[] propertyNames = (string[])propertyInfo.GetValue(info, null);// info.MemberNames;
if(LibSysUtils.ArrayIncludeSTR(propertyNames, propertyName))
{
objResult = info.GetValue(propertyName, type);
if(objResult == null)
{
objResult = defaultValue;
}
}
}
return objResult;
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲bool的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public bool GetBoolValue(SerializationInfo info, string propertyName, bool defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(bool), defaultValue);
return LibSysUtils.ToBoolean(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲Int的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public int GetIntValue(SerializationInfo info, string propertyName, int defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(int), defaultValue);
return LibSysUtils.ToInteger(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲long的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public long GetLongValue(SerializationInfo info, string propertyName, int defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(int), defaultValue);
return LibSysUtils.ToLong(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲String的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public string GetStringValue(SerializationInfo info, string propertyName, string defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(string), defaultValue);
return LibSysUtils.ToString(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲DateTime的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public DateTime GetDateTimeValue(SerializationInfo info, string propertyName, DateTime defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(DateTime), defaultValue);
return LibSysUtils.ToDateTime(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲Double的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public double GetDoubleValue(SerializationInfo info, string propertyName, double defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(double), defaultValue);
return LibSysUtils.ToDouble(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲Decimal的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public decimal GetDecimalValue(SerializationInfo info, string propertyName, decimal defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(decimal), defaultValue);
return LibSysUtils.ToDecimal(objResult);
}
/// <summary>
/// 獲取SerializationInfo中的值類型爲Color的值
/// </summary>
/// <param name="info">SerializationInfo對象</param>
/// <param name="propertyName">值名稱</param>
/// <param name="defaultValue">默認值</param>
/// <returns>返回對應值</returns>
public Color GetColorValue(SerializationInfo info, string propertyName, Color defaultValue)
{
object objResult = this.GetObjectValue(info, propertyName, typeof(Color), defaultValue);
return (Color)objResult;
}
#endregion
#region 序列化回調處理
protected virtual void AfterDeserialization(object sender)
{
}
#endregion
public void OnDeserialization(object sender)
{
this.AfterDeserialization(sender);
}
#region 拷貝方法
/// <summary>克隆自身</summary>
/// <returns></returns>
public object CloneSelf()
{
object result = LibSerializerControl.CloneObject(this);
return result;
}
#endregion
}
【代碼片段】序列化和反序列化之對象基類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.