2011-04-07 35 views
0

我目前使用這樣的LINQ到XML保存列表嵌套對象

XDocument xmlDoc = XDocument.Load(path); 
    List<ImportDefinition> importDefinitions = xmlDoc.Descendants("Root").Select(xElem => (ImportDefinition)xElem).ToList(); 
    return importDefinitions; 

對象的此列表中包含嵌套對象代碼加載XML文件到列表中的對象和每個人都有一個運營商解析XML到這樣的正確形式

public static explicit operator Rules(XElement xElem) 
{ 
    try 
    { 
     return new Rules() 
     { 
      FileNameRegEx = (string)xElem.Element("FileNameRegEx"), 
      FileExtension = (string)xElem.Element("FileExtension") 
     }; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 

這對加載XML工作正常。我現在想要在對這些對象進行一些編輯之後將其保存回XML。

我希望這樣的事情會工作

XElement xml = new XElement("Root", 
          from p in ObjectList 
          select new XElement("File",RootObject 
           )); 
    } 
    xml.Save("C:\\temp\\newimport.xml"); 

然而,這似乎只是輸出這個

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <File>MyNamespace.RootObject</File> 
    <File>MyNamespace.RootObject</File> 
</Root> 

它看起來它不使用加載文件來工作,當它使用自定義的運營商如取出保存的格式。將這些數據保存回XML的最佳方式是,當我讀取它時所用的格式是什麼?

回答

3

好一件事你只告訴我們從一個的XElement解析操作......但即便如此,你顯然明確調用,在你的LINQ表達。如果您構建XML時要等價,你需要明確有太多:

XElement xml = new XElement("Root", 
          from p in ObjectList 
          select new XElement("File", (XElement) p)); 

個人而言,我會使用方法,而不是運營商 - ToXElement()和FromXElement() - 我認爲這是更清晰的那種方式。 ToXElement將是一個實例方法; FromXElement將是一個靜態方法。這是我多次使用的模式,並且它一直運行良好。