我不熟悉.NET的XML库,并试图绕过IXmlSerializable接口。我正在开发一个Windows应用商店应用程序(W8)并希望使用IXmlSerializable接口,但是我遇到了问题。 XmlTextWriter在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();
}
答案 0 :(得分:1)
鉴于评论主题 - 这是关于不关闭所有资源。您正在处置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);
}
}