将SQL Server中的XML存储到对象中,并解析

将SQL Server中的XML存储到对象中,并解析

问题描述:

我在需要读入我的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的方法 –

这里是一个解决方案:

“设置”保存在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) 
     { 

     } 
     } 
    } 
}