C# 如何从对象列表创建xml文件
我定义了3个类:C# 如何从对象列表创建xml文件,c#,xml,xml-serialization,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 = "Publish
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";
}
}
公共类发布页面
{
公共字符串操作{get;private set;}
公共字符串PageGuid{get;set;}
公共列表SearchableProperties{get;set;}
公共发布页面()
{
Action=“Published”;
SearchableProperties=新列表();
}
}
公共类删除页
{
公共字符串操作{get;private set;}
公共字符串PageGuid{get;set;}
公共删除页面()
{
Action=“已删除”;
}
}
公共类移动页面
{
公共字符串操作{get;private set;}
公共字符串PageGuid{get;set;}
公共字符串OldParentGuid{get;set;}
公共字符串NewParentGuid{get;set;}
公共移动页面()
{
Action=“Moved”;
}
}
在代码的某个地方,我有这样的东西:
List<PublishedPage> publishedPages = GetPublishedPages();
List<MovedPage> movedPages = GetMovedPages();
List<DeletedPage> deletedPages = GetDeletedPages();
<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>
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmltextWriter = new XmlTextWriter(stringWriter) {Formatting = Formatting.Indented};
// Start document
xmltextWriter.WriteStartDocument();
xmltextWriter.WriteStartElement("ROOT");
foreach (PublishedPage page in publishedPages)
{
//Create a page element
xmltextWriter.WriteStartElement("Page");
xmltextWriter.WriteAttributeString("Action", page.Action);
xmltextWriter.WriteAttributeString("SearchableProperties", page.SearchableProperties);
xmltextWriter.WriteEndElement();
}
// Same for the other lists
// End document
xmltextWriter.WriteEndElement();
xmltextWriter.Flush();
xmltextWriter.Close();
stringWriter.Flush();
List publishedPages=GetPublishedPages();
List movedPages=GetMovedPages();
List deletedpage=getdeletedpage();
现在我想创建一个包含这3个集合的XML文件,但不知道如何创建XML应该是这样的:
List<PublishedPage> publishedPages = GetPublishedPages();
List<MovedPage> movedPages = GetMovedPages();
List<DeletedPage> deletedPages = GetDeletedPages();
<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>
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmltextWriter = new XmlTextWriter(stringWriter) {Formatting = Formatting.Indented};
// Start document
xmltextWriter.WriteStartDocument();
xmltextWriter.WriteStartElement("ROOT");
foreach (PublishedPage page in publishedPages)
{
//Create a page element
xmltextWriter.WriteStartElement("Page");
xmltextWriter.WriteAttributeString("Action", page.Action);
xmltextWriter.WriteAttributeString("SearchableProperties", page.SearchableProperties);
xmltextWriter.WriteEndElement();
}
// Same for the other lists
// End document
xmltextWriter.WriteEndElement();
xmltextWriter.Flush();
xmltextWriter.Close();
stringWriter.Flush();
出版
.....
名字1
名称2
...
...
...
任何帮助都将不胜感激。谢谢大家! 使用序列化,这里有一个很好的例子:序列化相当慢。性能方面。类似的方法如下:
List<PublishedPage> publishedPages = GetPublishedPages();
List<MovedPage> movedPages = GetMovedPages();
List<DeletedPage> deletedPages = GetDeletedPages();
<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>
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmltextWriter = new XmlTextWriter(stringWriter) {Formatting = Formatting.Indented};
// Start document
xmltextWriter.WriteStartDocument();
xmltextWriter.WriteStartElement("ROOT");
foreach (PublishedPage page in publishedPages)
{
//Create a page element
xmltextWriter.WriteStartElement("Page");
xmltextWriter.WriteAttributeString("Action", page.Action);
xmltextWriter.WriteAttributeString("SearchableProperties", page.SearchableProperties);
xmltextWriter.WriteEndElement();
}
// Same for the other lists
// End document
xmltextWriter.WriteEndElement();
xmltextWriter.Flush();
xmltextWriter.Close();
stringWriter.Flush();
您需要的是@Kyndings所指示的XML序列化。但是我会给你一些代码片段来帮助你: 为了序列化一个对象,您的代码应该类似于
string serializedPublishedPage = Serializer.SerializeObject(PublishedPage, typeof(PublishedPage));
要将这三个元素都放在同一个XML中,您需要创建一个函数,该函数生成一个XMLElements列表:
private List<XmlElement> functionA ()
{
XmlDocument doc = new XmlDocument();
List<XmlElement> elementList = new List<XmlElement>();
XmlElement element;
string serializedPublishedPage = Serializer.SerializeObject(PublishedPage, typeof(PublishedPage));
string serializedDeletedPage = Serializer.SerializeObject(DeletedPage, typeof(DeletedPage));
string serializedMovedPage = Serializer.SerializeObject(MovedPage, typeof(MovedPage));
doc.LoadXml(serializedDemographic);
element = doc.DocumentElement;
elementList.Add(element);
return elementList;
}
试试这个,我正在使用Xml序列化:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Pages pages = new Pages();
pages.PublishedPages.Add(
new PublishedPage()
{
PageGuid = Guid.NewGuid().ToString(),
SearchableProperties = new List<string>()
{
"Foo",
"Bar",
}
});
pages.PublishedPages.Add(
new PublishedPage()
{
PageGuid = Guid.NewGuid().ToString(),
SearchableProperties = new List<string>()
{
"Tic",
"Tac",
"Toe",
}
});
pages.DeletedPages.Add(
new DeletedPage()
{
PageGuid = Guid.NewGuid().ToString(),
});
pages.DeletedPages.Add(
new DeletedPage()
{
PageGuid = Guid.NewGuid().ToString(),
});
pages.MovedPages.Add(
new MovedPage()
{
PageGuid = Guid.NewGuid().ToString(),
OldParentGuid = Guid.NewGuid().ToString(),
NewParentGuid = Guid.NewGuid().ToString(),
});
pages.MovedPages.Add(
new MovedPage()
{
PageGuid = Guid.NewGuid().ToString(),
OldParentGuid = Guid.NewGuid().ToString(),
NewParentGuid = Guid.NewGuid().ToString(),
});
Console.WriteLine(SerializeObject(pages));
}
/// <summary>
/// To convert a Byte Array of Unicode values (UTF-8 encoded) to a complete String.
/// </summary>
/// <param name="characters">Unicode Byte Array to be converted to String</param>
/// <returns>String converted from Unicode Byte Array</returns>
private static string UTF8ByteArrayToString(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
}
/// <summary>
/// Converts the String to UTF8 Byte array and is used in De serialization
/// </summary>
/// <param name="pXmlString"></param>
/// <returns></returns>
private static Byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
/// <summary>
/// From http://www.dotnetjohn.com/articles.aspx?articleid=173
/// Method to convert a custom Object to XML string
/// </summary>
/// <param name="pObject">Object that is to be serialized to XML</param>
/// <returns>XML string</returns>
public static string SerializeObject(Object pObject)
{
try
{
string xmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(pObject.GetType());
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
xs.Serialize(xmlTextWriter, pObject, ns);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
xmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return xmlizedString;
}
catch (Exception e)
{
System.Console.WriteLine(e);
return null;
}
}
}
[XmlRoot(ElementName="Pages", Namespace="")]
public class Pages
{
public List<PublishedPage> PublishedPages { get; set; }
public List<MovedPage> MovedPages { get; set; }
public List<DeletedPage> DeletedPages { get; set; }
public Pages()
{
PublishedPages = new List<PublishedPage>();
MovedPages = new List<MovedPage>();
DeletedPages = new List<DeletedPage>();
}
}
public class PublishedPage
{
public string Action { get; 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; set; }
public string PageGuid { get; set; }
public DeletedPage()
{
Action = "Deleted";
}
}
public class MovedPage
{
public string Action { get; set; }
public string PageGuid { get; set; }
public string OldParentGuid { get; set; }
public string NewParentGuid { get; set; }
public MovedPage()
{
Action = "Moved";
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
页面=新页面();
pages.PublishedPages.Add(
新发布的页面()
{
PageGuid=Guid.NewGuid().ToString(),
SearchableProperties=新列表()
{
“福”,
“酒吧”,
}
});
pages.PublishedPages.Add(
新发布的页面()
{
PageGuid=Guid.NewGuid().ToString(),
SearchableProperties=新列表()
{
“议会”,
“交咨会”,
“脚趾”,
}
});
pages.DeletedPages.Add(
新的DeletedPage()
{
PageGuid=Guid.NewGuid().ToString(),
});
pages.DeletedPages.Add(
新的DeletedPage()
{
PageGuid=Guid.NewGuid().ToString(),
});
pages.MovedPages.Add(
新移动页面()
{
PageGuid=Guid.NewGuid().ToString(),
OldParentGuid=Guid.NewGuid().ToString(),
NewParentGuid=Guid.NewGuid().ToString(),
});
pages.MovedPages.Add(
新移动页面()
{
PageGuid=Guid.NewGuid().ToString(),
OldParentGuid=Guid.NewGuid().ToString(),
NewParentGuid=Guid.NewGuid().ToString(),
});
Console.WriteLine(序列化对象(页面));
}
///
///将Unicode值(UTF-8编码)的字节数组转换为完整字符串。
///
///要转换为字符串的Unicode字节数组
///从Unicode字节数组转换的字符串
专用静态字符串UTF8ByteArrayToString(字节[]个字符)
{
UTF8Encoding=新的UTF8Encoding();
string constructedString=encoding.GetString(字符);
返回(构造字符串);
}
///
///将字符串转换为UTF8字节数组,并用于反序列化
///
///
///
专用静态字节[]StringToUTF8ByteArray(字符串pXmlString)
{
UTF8Encoding=新的UTF8Encoding();
Byte[]byteArray=encoding.GetBytes(pXmlString);
乘火车返回;
}
///
///从http://www.dotnetjohn.com/articles.aspx?articleid=173
///方法将自定义对象转换为XML字符串
///
///要序列化为XML的对象
///XML字符串
公共静态字符串序列化对象(对象POObject)
{
尝试
{
字符串xmlizedString=null;
MemoryStream MemoryStream=新的MemoryStream();
XmlSerializer xs=新的XmlSerializer(pObject.GetType());
XmlTextWriter XmlTextWriter=新的XmlTextWriter(memoryStream,Encoding.UTF8);
xmlTextWriter.Formatting=Formatting.Indented;
XmlSerializerNamespaces ns=新的XmlSerializerNamespaces();
加上(“,”);
序列化(xmlTextWriter、POObject、ns);
memoryStream=(memoryStream)xmlTextWriter.BaseStream;
xmlizedString=UTF8ByteArrayToString(memoryStream.ToArray());
返回xmlizedString;
}
捕获(例外e)
{
系统控制台写入线(e);
返回null;
}
}
}
[XmlRoot(ElementName=“Pages”,Namespace=”“)]
公共类页面
{
公共列表发布页面{get;set;}
公共列表移动页面{get;set;}
公开名单