如何从对象列表创建xml文件

šlj*_*ker 5 c# xml xml-serialization

我定义了3个类:

public class PublishedPage
{
    public string Action { get; private set; }
    public string PageGuid { get; set; }
    public List<string> SearchableProperties { get; set; }

    public PublishedPage()
    {
        Action = "Published";
        SearchableProperties = new List<string>();
    }
}

public class DeletedPage
{
    public string Action { get; private set; }
    public string PageGuid { get; set; }

    public DeletedPage()
    {
        Action = "Deleted";
    }
}

public class MovedPage
{
    public string Action { get; private set; }
    public string PageGuid { get; set; }
    public string OldParentGuid { get; set; }
    public string NewParentGuid { get; set; }

    public MovedPage()
    {
        Action = "Moved";
    }
}
Run Code Online (Sandbox Code Playgroud)

代码中的某处我有这样的东西:

List<PublishedPage> publishedPages = GetPublishedPages();
List<MovedPage> movedPages = GetMovedPages();
List<DeletedPage> deletedPages = GetDeletedPages();
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个包含这3个集合但不知道如何的XML文件.
XML应该是这样的:

<PublishedPages>
   <PublishedPage>
      <Action>Published</Action>
      <PageGuid>.....</PageGuid>
      <SearchableProperties>
         <Name>Name 1</Name>
         <Name>Name 2</Name>
      </SearchablePeoperties>
   </PublishedPage>
   <PublishedPage>
   ...
   <PublishedPage>
</PublishedPages>
<MovedPages>
...
</MovedPages>
<DeletedPages>
...
</DeletedPages>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.
谢谢!

jms*_*era 5

即使 XmlSerializer 是最简单的,如果您已经知道架构,您也可以使用一点 linq to xml 来完成它:

XElement element = 
    new XElement("PublishedPages",
        (from page in publishedPages 
             select new XElement("PublishedPage",
                 new XElement("Action", page.Action),
                 new XElement("PageGuid",page.PageGuid),
                 new XElement("SearchableProperties",
                     (from property in page.SearchableProperties
                      select new XElement("Name",property)))
                      )
         )
     );
Run Code Online (Sandbox Code Playgroud)


kyn*_*igs 0

使用序列化,一个很好的例子在这里:http ://support.microsoft.com/kb/815813