ฉันต้องการรับ xml ธรรมดาโดยไม่มี<?xml version="1.0" encoding="utf-16"?>
จุดเริ่มต้นและxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
ในองค์ประกอบแรกจากXmlSerializer
. ฉันจะทำมันได้อย่างไร?
ฉันต้องการรับ xml ธรรมดาโดยไม่มี<?xml version="1.0" encoding="utf-16"?>
จุดเริ่มต้นและxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
ในองค์ประกอบแรกจากXmlSerializer
. ฉันจะทำมันได้อย่างไร?
คำตอบ:
เพื่อรวบรวมทั้งหมดนี้ - ใช้ได้ดีสำหรับฉัน:
// To Clean XML
public string SerializeToString<T>(T value)
{
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, value, emptyNamespaces);
return stream.ToString();
}
}
using( writer )
ดังที่เห็นในคำถามนี้: stackoverflow.com/a/11192524/2144408
ใช้XmlSerializer.Serialize
เมธอด overload ซึ่งคุณสามารถระบุเนมสเปซที่กำหนดเองและส่งผ่านไปที่นั่น
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
การส่งอาร์เรย์ว่างหรือว่างจะไม่ทำเคล็ดลับ
คุณสามารถใช้XmlWriterSettingsและตั้งค่าคุณสมบัติOmitXmlDeclarationให้เป็นจริงตามที่อธิบายไว้ใน MSDN จากนั้นใช้XmlSerializer.Serialize (XmlWriter, objectToSerialize) ตามที่อธิบายไว้ที่นี่
สิ่งนี้จะเขียน XML ลงในไฟล์แทนสตริง Object ticket คือวัตถุที่ฉันทำให้เป็นอนุกรม
Namespaces ที่ใช้:
using System.Xml;
using System.Xml.Serialization;
รหัส:
XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
XmlSerializer serializer = new XmlSerializer(typeof(ticket));
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = true
};
using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
serializer.Serialize(xmlWriter, ticket, emptyNamespaces);
}