序列化一个 .net 对象并省略 doctype?

5
我已经编写了一些 .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序列化对象的根元素用作另一个XML文档的一部分。


我应该补充说明,我确信我可以通过字符串操作来完成这个任务,但我希望有一种内置机制来完成这个任务。 - Vivian River
不是真正的答案,但你可以使用类似于str.substring(str.indexof('>')+1)这样的东西。(我不使用C#,所以不确定语法,但你明白我的意思) - OneOfOne
3
你展示给我们的代码片段中完全没有文档类型声明。 - Joey
@Joey,我指的是<?xml version="1.0" encoding="utf-16"?>。这段代码的正确术语是什么? - Vivian River
这是一个XML声明。 - Joey
1个回答

10

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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接