2015-09-22 49 views
0

我在需要讀入我的c#應用程序並存儲到對象中的數據類型XML的SQL Server表中有一列。列中數據的格式爲將SQL Server中的XML存儲到對象中,並解析

<call> 
    <attempted> 
     <enterdata/> 
    </attempted> 
    <completed> 
     <enterdata/> 
     <updatedate/> 
    </completed> 
</call> 

這個想法是,用戶呼叫客戶,之後必須填寫報告。在指出他們是否到達客戶(已完成)或未到達(嘗試)之後,應用程序將相應地解析XML並確定它必須在系統中進行哪些更新。

但是,我不知道要在Call類中使用哪種數據類型來存儲此信息,然後稍後解析它以查看需要進行哪些更新。我嘗試使用XElement,但得到一個錯誤,說「不能隱式地將類型'對象'轉換爲'System.Xml.Linq.XElement'。我在施放它時遇到了類似的錯誤,但是對'String'說,我相信。我希望能得到關於如何處理一些這方面的建議,從什麼樣的數據類型來存儲XML數據,如何分析它

+0

使用調試器的快速監視功能來檢查對象的類型從服務器返回。我敢打賭,它只是你需要解析爲一個的XElement字符串。 – Will

+0

你ç使用'SqlCommand.ExecuteXmlReader'並創建一個'XDocument',這是一種簡單的解析XML的方法 –

回答

0

這裏是一個解決方案:

「設置」保存在XML在DB。

 IDictionary<string, string> setting = new Dictionary<string, string>(); 

using (DbDataReader reader = command.ExecuteReader()) 
{ 
    if (reader.Read()) 
    { 
     object settingValue = reader["setting"]; 
     if (settingValue != null) 
     { 
     try 
      { 
       // Test if the content can be parsed as XElement before contract deserialize 
      XElement xNode = XElement.Parse(settingValue.ToString()); 
      if (xNode != null) 
      { 
       setting = (IDictionary<string, string>)XmlUtil.DataContractDeserialize(settingValue.ToString(), setting.GetType()); 
      } 
      } 
     catch (XmlException) 
     { 

     } 
     } 
    } 
}