0

我知道这里有很多关于 xml 序列化/反序列化的主题,还有其他网站上的更多主题,但我找不到任何适合我的东西。

我实际上正在开发一个使用 C# 和 XAML 开发的 Windows 8 Store 应用程序。这个应用程序应该作为一个简单的 wiki 应用程序工作,所以不需要做很多代码。但是我必须在这个应用程序中输入很多信息。所以我选择了这个:用户选择他想要的按钮,无论他点击哪个按钮,它都会导航到同一个页面,但是这个页面必须显示来自 xml 文件的信息。我认为这比创建大量页面要好。我实际上可以获得用户单击的按钮,因此我可以选择要打开的好文件。

但实际上我从来没有使用过 XML 序列化,所以我不知道该怎么做。

因此,我正在寻找反序列化预制 xml 文件的最佳/最简单方法。该页面从不序列化任何内容,并且用户无法修改文件。这就像一个吸气剂。所有应用程序需要做的就是打开 xml 文件并将信息放入文本块中。

提前感谢您的帮助,我有点困惑这样问,但这就是我现在能做的:/

4

2 回答 2

2

据我了解,您想知道如何从 XML 文件中序列化和/或反序列化。这是来自 Windows Store 应用程序的一些工作代码。

使用 System.IO;
使用 System.IO.IsolatedStorage;
使用 System.Xml.Serialization;

命名空间亚军 { 公共静态类 SerializationHelper { 公共静态无效保存(Schedule shedule) { 使用 (var store = IsolatedStorageFile.GetUserStoreForApplication()) 使用 (var fileStream = store.CreateFile("Schedule.xml")) 使用 (var writer = new StreamWriter(fileStream)) { var ser = new XmlSerializer(typeof(Schedule)); ser.Serialize(作家,shedule); writer.Close(); } }

public static Schedule Load() { var shcedule = new Schedule(); using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) { if (storage.FileExists("Schedule.xml")) { using (var stream = storage.OpenFile("Schedule.xml", FileMode.Open)) { var xml = new XmlSerializer(typeof(Schedule)); shcedule = xml.Deserialize(stream) as Schedule; stream.Close(); } } } return shcedule; } }

}

于 2013-07-25T01:40:44.617 回答
0

这应该可以,但它显然不会在 Windows 10 中反序列化。我最好每次只抓取网页而不是尝试保存数据。

public static async Task<T> ReadObjectFromXmlFileAsync<T>(string filename)
    {

        Stopwatch timer = new Stopwatch();
        timer.Start();
        // this reads XML content from a file ("filename") and returns an object  from the XML
        T objectFromXml = default(T);
        var serializer = new XmlSerializer(typeof(T));
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFile file = await folder.GetFileAsync(filename);
        Stream stream = await file.OpenStreamForReadAsync();
        objectFromXml = (T)serializer.Deserialize(stream);
        stream.Dispose();
        timer.Stop();
        double time = timer.ElapsedMilliseconds;
        return objectFromXml;
    }

    public static async Task SaveObjectToXml<T>(T objectToSave, string filename)
    {
        Stopwatch timer = new Stopwatch();
        timer.Start();
        // stores an object in XML format in file called 'filename'
        var serializer = new XmlSerializer(typeof(T));
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFile file = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
        Stream stream = await file.OpenStreamForWriteAsync();

        using (stream)
        {
            serializer.Serialize(stream, objectToSave);
        }
        timer.Stop();
        double time = timer.ElapsedMilliseconds;
        Connection.Downloaded();
    }

}

然后只需将您的视图绑定到存储数据的任何类...

于 2015-08-09T22:30:34.953 回答