Я не очень хорошо разбираюсь в XML-библиотеках .NET и пытаюсь понять интерфейс 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();
}
x.Close()
? Интересно, все ли это буферизовано... (В идеале используйте операторыusing
дляfs
иx
.) - person Jon Skeet   schedule 07.07.2014