从xmlserializer中删除编码

czu*_*ski 15 c# xmlserializer

我使用以下代码创建一个xml文档 -

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
new XmlSerializer(typeof(docket)).Serialize(Console.Out, i, ns); 
Run Code Online (Sandbox Code Playgroud)

这非常适合创建没有命名空间属性的xml文件.我想在根元素中也没有编码属性,但我找不到办法.有没有人知道是否可以这样做?

谢谢

Ach*_*him 26

删除旧答案并使用新解决方案进行更新:

假设可以完全删除xml声明,因为没有编码属性它没有多大意义:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", "");
using (XmlWriter writer = XmlWriter.Create(Console.Out, new XmlWriterSettings { OmitXmlDeclaration = true}))
{
  new XmlSerializer(typeof (SomeType)).Serialize(writer, new SomeType(), ns);
}
Run Code Online (Sandbox Code Playgroud)

  • 这更像是一个评论,而不是一个正确的答案......尝试处理你的答案,否则你可能会为此付出代价 (5认同)

Pet*_*cek 6

要从XML头中删除编码,请将带有编码的TextWriter传递给XmlSerializer:

MemoryStream ms = new MemoryStream();
XmlTextWriter w = new XmlTextWriter(ms, null);
s.Serialize(w, vs);
Run Code Online (Sandbox Code Playgroud)

说明

XmlTextWriter使用构造函数中传递的TextWriter编码:

// XmlTextWriter constructor 
public XmlTextWriter(TextWriter w) : this()
{
  this.textWriter = w;
  this.encoding = w.Encoding;
  ..
Run Code Online (Sandbox Code Playgroud)

它在生成XML时使用此编码:

// Snippet from XmlTextWriter.StartDocument
if (this.encoding != null)
{
  builder.Append(" encoding=");
  ...
Run Code Online (Sandbox Code Playgroud)