Windows 8商店应用程序XmlWriter不写入任何文件

本文关键字:任何 文件 XmlWriter 应用程序 Windows | 更新日期: 2023-09-27 18:11:43

我对。net的XML库不是很熟悉,并试图理解IXmlSerializable接口。我正在开发一个windows商店应用程序(W8),并希望使用IXmlSerializable接口,但是我遇到了问题。xmltextwwriter在windows商店应用程序中不可用,所以我使用XmlWriter的工厂方法,但我的代码不输出任何内容到XML文件(其空白)。

如果我使用XmlSerializer, XML文件将按预期输出,但希望实现IXmlSerializable,因为在我的生产应用程序中,我将有私有字段。

下面是我使用

的示例代码
public class XMLTest : IXmlSerializable
{
    private string name;
    public string Name { get { return this.name; } set { this.name = value; } }
    private XMLTest() { }
    public XMLTest(string name)
    {
        this.name = name;
    }
    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }
    public void ReadXml(System.Xml.XmlReader reader)
    {
        throw new NotImplementedException();
    }
    public void WriteXml(System.Xml.XmlWriter writer)
    {
        writer.WriteAttributeString("Name", this.name);
    }
}

后面的XAML代码
private async void saveButton_Click(object sender, RoutedEventArgs e)
    {
        XMLTest t = new XMLTest("test name");
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        Stream fs = await folder.OpenStreamForWriteAsync("testingXML.xml", CreationCollisionOption.ReplaceExisting);
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.ConformanceLevel = ConformanceLevel.Auto;
        var x = XmlWriter.Create(fs, settings);
        //XmlSerializer xs = new XmlSerializer(t.GetType());
        //xs.Serialize(fs, t);
        t.WriteXml(x);
        fs.Dispose();
    }

Windows 8商店应用程序XmlWriter不写入任何文件

给定评论线程-这是关于不关闭所有资源。您处理的是fs(如果没有抛出异常,则手动处理),而不是x。你真的应该使用using语句,像这样:

using (var stream = await folder.OpenStreamForWriteAsync(...))
{
    var settings = new XmlWriterSettings { ConformanceLevel = ConformanceLevel.Auto };
    using (var writer = XmlWriter.Create(stream, settings))
    {
        t.WriteXml(writer);
    }
}