【问题标题】:Serialize a .net object and omit the doctype?序列化 .net 对象并省略文档类型?
【发布时间】:2012-10-04 14:21:19
【问题描述】:

我编写了一些 .net 代码来使用 XMLSerializer 类序列化对象。

    public static string serialize(object o)
    {
            Type type = o.GetType();
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);                
            System.IO.StringWriter writer = new System.IO.StringWriter();
            serializer.Serialize(writer, o);                
            return writer.ToString();         
    }

输出如下:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>a</string>
  <string>b</string>
  <string>c</string>
</ArrayOfString>

这很好,但我真正想要的是在开始时只获取根节点而没有 XML doctype 声明。

我想这样做是因为我想将 XML 序列化对象的根元素用作另一个 XML 文档的一部分。

【问题讨论】:

  • 我应该补充一点,我确信我可以通过字符串操作来做到这一点,但我希望可能有一个内置机制来做到这一点。
  • 不是一个真正的答案,但你总是可以使用类似 str.substring(str.indexof('>')+1) 的东西。 (我不使用 C#,所以不确定语法,但你明白了)
  • 你给我们看的sn-p根本没有doctype。
  • @Joey,我指的是`。这个 sn-p 的正确术语是什么?
  • 这是一个 XML 声明。

标签: c# .net xml xml-serialization


【解决方案1】:

XmlWriterSettings 有一个属性可以省略 XML 声明 (OmitXmlDeclaration):

public static string Serialize(object obj)
{
    var builder = new StringBuilder();
    var xmlSerializer = new XmlSerializer(obj.GetType());
    using (XmlWriter writer = XmlWriter.Create(builder,
        new XmlWriterSettings() { OmitXmlDeclaration = true }))
    {
        xmlSerializer.Serialize(writer, obj);
    }
    return builder.ToString();
}

【讨论】:

  • 这正是我所需要的。谢谢!
猜你喜欢
  • 2016-01-04
  • 2011-11-23
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多