2010-03-16 12 views
3

我試圖將DataTable序列化爲Json或XML。它可能和如何?請提供任何教程和想法。如何將DataTable序列化爲json或xml

例如,一個有一個SQL表:

CREATE TABLE [dbo].[dictTable](
    [keyValue] [int] IDENTITY(1,1) NOT NULL, 
    [valueValue] [int] NULL, 
CONSTRAINT [Psd2Id] PRIMARY KEY CLUSTERED 
(
    [keyValue] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

C#代碼:

string connectionString = 
      "server=localhost;database=dbd;uid=**;pwd=**"; 

      SqlConnection mySqlConnection = new SqlConnection(connectionString); 
      string selectString = "SELECT keyValue, valueValue FROM dicTable"; 

      SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); 

      mySqlCommand.CommandText = selectString; 

      SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(); 

      mySqlDataAdapter.SelectCommand = mySqlCommand; 

      DataSet myDataSet = new DataSet(); 

      mySqlConnection.Open(); 

      string dataTableName = "dictionary"; 
      mySqlDataAdapter.Fill(myDataSet, dataTableName); 

      DataTable myDataTable = myDataSet.Tables[dataTableName]; 
      //now how to serialize it? 

回答

9

到XML很簡單:

DataTable myTable = new DataTable(); 
myTable.WriteXml(@"c:\myfile"); 
1

讓我試着回答你的問題。當涉及到數據集或數據表的序列化時,不會持久保存到文件和回讀中。這會導致IO開銷並且在所有情況下都不可行。你需要做的是編寫一個函數來序列化DataTable。 (請確保您給DataTable命名爲序列化。請參見下面的示例C#

/*使用此方法將給定的對象序列化爲XML,我們將通過數據表傳遞給此後*/

private XmlElement Serialize(object obj) 
    { 
     XmlElement serializedXmlElement = null; 

     try 
     { 
      System.IO.MemoryStream memoryStream = new MemoryStream(); 
      System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(obj.GetType()); 
      xmlSerializer.Serialize(memoryStream, obj); 
      memoryStream.Position = 0; 

      XmlDocument xmlDocument = new XmlDocument(); 
      xmlDocument.Load(memoryStream); 
      serializedXmlElement = xmlDocument.DocumentElement; 
     } 
     catch (Exception e) 
     { 
      //logging statements. You must log exception for review 
     } 

     return serializedXmlElement; 
    } 

你已經實現了序列化方法後,您可以序列化的數據表,如下圖所示。這裏我不寫我的整個樣本爲簡潔。

 adapter.Fill(employee); 
     employee.TableName = "Employees"; 
     XmlElement xmlElement = (XmlElement)Serialize(employee); 
     Console.WriteLine(xmlElement.ToString()); 
     string xmlString = xmlElement.OuterXml.ToString(); 

     return xmlString; 

希望這有助於。請讓我知道,如果你有更多的問題,

0

下面是如何將它轉換成JSON:

 DataTable dt = new DataTable(); 
     dt.Load(reader); 
     string temp = JsonConvert.SerializeObject(dt); 

,如果你想這個JSON轉換爲對象的列表(也可能是您的EF表),然後使用下面的:

dbContext db = new dbContext(); 
List<Object> jsonList = (List<Object>)JsonConvert.DeserializeObject(temp, typeof(List<Object>));