2013-04-25 56 views
0

我有一個xml,我根據xml中的文本更新了treeview。 示例XML: 反序列化xml文檔正在改變xml中節點的值

<TaskSeverity></TaskSeverity> 
<TaskCategory></TaskCategory> 
<TaskTitle></TaskTitle> 
<TaskMessage></TaskMessage> 
<TaskCode></TaskCode> 
<TaskName>SQL_MAPPING_COMPANIES</TaskName> 
<Schema>CLIENT</Schema> 
<!-- Schema is a required field --> 
<Mapping>Companies</Mapping> 
<!-- Mapping is a required field --> 
<CacheDb>false</CacheDb> 
<!-- CacheDb is an optional field. Default value is false --> 
<DeleteTableBeforeExecute>true</DeleteTableBeforeExecute> 
<!-- DeleteTableBeforeExecute is an optional field. Default value is false --> 

現在我有這確實是一個方法。

public void UpdateTreeView(XmlDocument xDoc) 
     { 
     xmlTreeViewAdv.Nodes.Clear(); 
     _nodeToTaskDictionary.Clear(); 
     if (xDoc == null) 
      return; 
     TreeNodeAdv rootNode = new TreeNodeAdv(xDoc.DocumentElement.Name); 
     if (rootNode.Text.Equals("DmtTask") && xDoc.DocumentElement != null) 
     { 
      foreach (XmlAttribute attribute in xDoc.DocumentElement.Attributes) 
      { 
       if (attribute.Name.Equals("xsi:type")) 
       { 
        rootNode.Text = attribute.Value; 
       } 
      } 
     } 



    xmlTreeViewAdv.Nodes.Add(rootNode); 


     rootNode.Font = new Font(rootNode.Font, FontStyle.Bold); 

_nodeToTaskDictionary.Add(rootNode, DmtTaskToolbox.FromXml(xDoc)); 
//This particular line does the deserialization part. 

} 

//其中_nodeToTaskDictionary是

public Dictionary<TreeNodeAdv, DmtTask> _nodeToTaskDictionary = new Dictionary<TreeNodeAdv, DmtTask>(); 

//where TreeNodeAdv is the Treeview (Syncfusion) and DmtTask is an abstract class 

public static class DmtTaskToolbox 
    { 
     public static DmtTask FromXml(XmlDocument xDoc) 
     { 
     DmtTask t = DmtTask.DmtXmlSerializer.Deserialize(new XmlNodeReader(xDoc)) as DmtTask; 
      // As soon as the above line is executed the value of the last node DeleteTableBeforeExecute innerText is changing to False. I could not understand the reason for it 
     if (t == null) 
      throw new Exception("Unable to convert the specific XML document DmtTask"); 
     return t; 
     } 
    } 

公共靜態XmlSerializer的DmtXmlSerializer =新的XmlSerializer(typeof運算(DmtTask),DmtTaskTypes);

根據該節點的值,我將刪除表中的所有記錄並插入新記錄。但它返回假。

這是什麼,是看反序列化

<TaskSeverity></TaskSeverity> 
<TaskCategory></TaskCategory> 
<TaskTitle></TaskTitle> 
<TaskMessage></TaskMessage> 
<TaskCode></TaskCode> 
<TaskName>SQL_MAPPING_COMPANIES</TaskName> 
<Schema>CLIENT</Schema> 
<!-- Schema is a required field --> 
<Mapping>Companies</Mapping> 
<!-- Mapping is a required field --> 
<CacheDb>false</CacheDb> 
<!-- CacheDb is an optional field. Default value is false --> 
<DeleteTableBeforeExecute>false</DeleteTableBeforeExecute> 
<!-- DeleteTableBeforeExecute is an optional field. Default value is false --> 

任何幫助,將不勝感激

+0

找到了問題。問題是在抽象類DeleteTableBeforeExectue中定義的公共變量與在我試圖反序列化的xmldocument中定義的標記DeleteTableBeforeExecute的拼寫不同。將類序列化爲XML時,每個公共屬性和字段值都將轉換爲XML元素。元素的名稱與屬性的名稱相匹配。 XmlElement屬性允許修改XML標籤的名稱和格式。 – 2013-04-29 09:56:06

回答

0

的問題是用在抽象類DeleteTableBeforeExectue定義的公共變量後,不同於在我試圖反序列化的xmldocument中定義的標記DeleteTableBeforeExecute的拼寫。

將類序列化爲XML時,每個公共屬性和字段值都轉換爲XML元素。元素的名稱與屬性的名稱相匹配。 XmlElement屬性允許修改XML標籤的名稱和格式