0

由于所有使用 DataContractSerializer 的示例只处理一个对象,我感到很困惑。我有一个对象集合,我们称之为List<Ticket> tickets。我可以使用 DataContractSerializer 来编写每个对象foreach (var ticket in tickets),但之后我需要对 XML 运行转换以确保其格式正确。但是,当使用Transforma 的方法时,XmlCompiledTransform我继续收到错误"Unexpected end of file while parsing Name has occurred. Line 447, position 28."

以下是我的代码,欢迎所有建设性的批评。

using (var ms = new MemoryStream())
{
    using (var writer = XmlWriter.Create(ms, settings))
    {
        var ser = new DataContractSerializer(tickets.GetType());
        writer.WriteStartDocument(true);
        writer.WriteStartElement("Tickets");
        foreach (var ticket in tickets)
        {
            ser.WriteObject(writer, ticket);
        }
        writer.WriteEndElement();
        writer.WriteEndDocument();
        ms.Position = 0;
        var xslt = new XslCompiledTransform();
        xslt.Load(xsltFp);
        using (var output = new FileStream(xmlFp, FileMode.Create))
        {
            xslt.Transform(XmlReader.Create(ms), null, output);
            output.Position = 0;
        }
    }
}
4

1 回答 1

0

我想到了。在foreach循环结束时,我需要调用writer.Flush();. 这在我们开始写入另一个对象之前有效地刷新了流缓冲区。

于 2013-06-07T16:11:47.107 回答