簡體   English   中英

如何序列化/反序列化自定義DataSet

[英]How to serialize/de-serialize a custom DataSet

我有一個winforms應用程序,它使用強類型自定義DataSet來保存數據以進行處理。 它將填充數據庫中的數據。

我有一個用戶控件,可以獲取任何自定義數據集並在數據網格中顯示內容。 這用於測試和調試。 為了使控件可重用,我將自定義數據集視為普通的System.Data.DataSet。

我已擴展控件以允許將數據集保存到XML文件,並加載以前保存的XML文件。

我現在要做的是獲取加載的數據文件,該文件被視為標准DataSet,並將其強制轉換回自定義數據集。 這應該不難,但我得到以下System.InvalidCastException消息:

無法將“System.Data.DataSet”類型的對象強制轉換為“CostingDataSet”類型。

以下是問題代碼的示例(它是生成異常的3的最后一行):

DataSet selected = debugDisplay.SelectedDataSet;

CostingDataSet tempDS = new CostingDataSet();
tempDS = (CostingDataSet)selected.Copy();

任何人都可以告訴我如何解決這個問題?

編輯:根據nEM的評論我實現了這一切,一切都很好。

foreach (System.Data.DataTable basicDT in selected.Tables)
{
    DataTable dt = tempDS.Tables[basicDT.TableName];
    dt = basicDT.Copy();
}

此外,SSarma建議的代碼也有效。

根據我從本網站收集的內容,您無法將常規數據集轉換為有類型的數據集,因為它的類型很強且具有一定的規格。 如果您將其保存為常規數據集,則在對其進行反序列化時,XML不會記錄它作為類型化數據集創建的情況。 對於xml文件,您只保存了常規數據集,因此它等同於嘗試通過顯式轉換將標准數據集轉換為類型化數據集,這是不允許的。

您可以創建一個populate方法,該方法將常規數據集作為參數,將所有數據復制到您鍵入的數據集中。

這假設您將其序列化為標准數據集。

如何使用Streams(對不起代碼未經過測試),但你明白了

 DataSet selected = debugDisplay.SelectedDataSet;

  string ds1 = selected.GetXml();
  CostingDataSet tempDS = new CostingDataSet();
  System.IO.MemoryStream ms = new System.IO.MemoryStream(ds1.Length);
  selected.WriteXml(ms);
  ms.Position = 0;

  tempDS.ReadXml(ms);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM