<?xml version="1.0" encoding="utf-16"?>
시작 부분과 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
.NET의 첫 번째 요소 없이 일반 xml을 가져와야 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 )
은 다음 질문에서 볼 수 있듯이 try catch 및에서 스트림을 null로 설정하는 것과 관련됩니다 . stackoverflow.com/a/11192524/2144408 .
XmlSerializer.Serialize
사용자 지정 네임 스페이스를 지정하고이를 전달할 수 있는 메서드 오버로드를 사용합니다 .
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
null 또는 빈 배열을 전달하는 것은 트릭을 수행하지 않습니다.
msdn에 설명 된 대로 XmlWriterSettings 를 사용 하고 OmitXmlDeclaration 속성 을 true로 설정할 수 있습니다 . 그런 다음 여기에 설명 된대로 XmlSerializer.Serialize (xmlWriter, objectToSerialize) 를 사용합니다 .
그러면 XML이 문자열 대신 파일에 기록됩니다. 객체 티켓은 내가 직렬화하는 객체입니다.
사용 된 네임 스페이스 :
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);
}