Это зависит от сценария. XmlSerializer
, безусловно, является одним из способов и имеет преимущество отображения непосредственно в объектную модель. В .NET 3.5, XDocument
и т. Д. Тоже очень дружелюбны. Если размер очень большой, то XmlWriter
ваш друг.
Для XDocument
примера:
Console.WriteLine(
new XElement("Foo",
new XAttribute("Bar", "some & value"),
new XElement("Nested", "data")));
Или то же самое с XmlDocument
:
XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);
Если вы пишете большой поток данных 1015 *, то любой из подходов DOM (например, XmlDocument
/ XDocument
и т. Д.) Быстро займет много памяти. Поэтому, если вы пишете XML-файл размером 100 МБ из CSV , вы можете рассмотреть XmlWriter
; это более примитивно (пожарный шланг с однократной записью), но очень эффективно (представьте большой цикл здесь):
XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();
Наконец, через XmlSerializer
:
[Serializable]
public class Foo
{
[XmlAttribute]
public string Bar { get; set; }
public string Nested { get; set; }
}
...
Foo foo = new Foo
{
Bar = "some & value",
Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);
Это хорошая модель для отображения классов и т. Д .; однако, это может быть излишним, если вы делаете что-то простое (или если желаемый XML не имеет прямой связи с объектной моделью). Еще одна проблема, связанная с XmlSerializer
, заключается в том, что он не любит сериализовывать неизменяемые типы: все должно иметь общедоступные методы установки и (если только вы сами не делаете это путем реализации IXmlSerializable
, в этом случае у вас нет XmlSerializer
).
.