XML反序列化不能將加載的數據設 置到一個現有對象,而是需要重新創建一個對象,在這個代碼中定義了靜態函數能從XML文檔 反序利化生成一個新的簽名信息文檔對象。其代碼為
/// <summary>
/// 根據XML文檔反序列化生成簽名信息文檔對象
/// </summary>
/// <param name="strFileName">XML文件名</param>
/// <returns>生成的簽名信息對象列表</returns>
public static PenMarkInfoDocument Load( string strFileName )
{
System.Xml.XmlTextReader reader = new System.Xml.XMLTextReader( strFileName );
XmlSerializer ser = new XMLSerializer( typeof( PenMarkInfoDocument ));
PenMarkInfoDocument list = ( PenMarkInfoDocument ) ser.Deserialize( reader );
reader.Close();
return list ;
}
在這個代碼 中,我們首先根據指定的XML文件名創建XML文檔讀取器,創建一個XMLSerializer對象,指定 要反序列化的對象類型,然後調用 Deserialize函數就可獲得一個反序列化所得的對象。
對WEB系統,XML序列化和反序列化是WebService的基礎,服務器端發送的數據首先序 列化為XML文檔然後使用HTTP協議發送出去,而客戶端獲得XML文檔使用XML反序列化來獲得對 象數據。
關於XML序列化和反序列化可參考MSDN文檔 Visual Studio.NET/.NET FrameWord/使用.Net Framework編程/序列化對象/XML和SOAP序列化。
PenMarkControl
本類型從UseControl上派生的,用於在用戶界面上顯示和操 作簽名信息的。該類型是本演示程序中最復雜的部分。
我們首先看看這個控件是如何 繪制用戶界面的,我們找到該控件重寫的OnPaint函數,其代碼如下
/// <summary>
/// 繪制用戶界面
/// </summary>
/// <param name="e">參數</param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
e.Graphics.TranslateTransform( this.AutoScrollPosition.X , this.AutoScrollPosition.Y );
System.Drawing.Rectangle ClipRect = e.ClipRectangle ;
ClipRect.Offset( - this.AutoScrollPosition.X , - this.AutoScrollPosition.Y );
System.Collections.ArrayList list = new ArrayList();
list.AddRange( this.myDocument );
if( this.Marking )
{
list.Add( this.myCurrentInfo );
}
foreach( PenMarkInfo info in list )
{
info.Draw( e.Graphics , ClipRect );
}
if( myCurrentInfo != null )
{
System.Drawing.Rectangle rect = myCurrentInfo.Bounds ;
System.Windows.Forms.ControlPaint.DrawFocusRectangle( e.Graphics , rect );
}
}