2013-07-24 26 views
0

我知道這裏有很多關於xml序列化/反序列化的話題,還有更多關於其他站點的話題,但是我找不到任何適合我的東西。Windows 8應用程序 - 反序列化xml文件?

我實際上正在使用C#和XAML開發的Windows 8商店應用程序。這個應用程序應該是一個簡單的維基應用程序,所以沒有太多的代碼可以做。但是我必須在這個應用程序中輸入很多信息。所以我選擇了這種方式:用戶通過按鈕選擇他想要的內容,不管他點擊了哪個按鈕,它都會導航到相同的頁面,但是此頁面必須顯示來自xml文件的信息。我認爲這比創建大量頁面要好。我實際上可以得到用戶點擊的按鈕,所以我可以選擇打開的好文件。

但實際上我從來沒有使用XML序列化,所以我不知道該怎麼做。

所以,我正在尋找反序列化預製XML文件的最佳/最簡單的方法。該頁面不會序列化任何內容,並且用戶無法修改文件。這就像一個吸氣。所有應用程序需要做的是打開xml文件並將信息放入文本塊中。

預先感謝您的幫助,我有點困惑問會這樣,但是這就是我現在可以做的:/

+0

MSDN有[信息噸(http://msdn.microsoft.com/en-us/library/182eeyhh .aspx)在這 – Sayse

+0

已經看過那裏。不工作。我的VS2012甚至不知道FileStream是什麼。是的,System.IO在我使用的語句。這就是爲什麼我在這裏:/ – YumeYume

+0

您是否使用.Net的客戶端版本?檢查您的項目屬性,並將其更改爲完整版.Net 4或4.5 –

回答

2

從你想知道如何序列我明白了什麼和/或從XML文件反序列化。以下是Windows應用商店的一些工作代碼。

 
using System.IO; 
using System.IO.IsolatedStorage; 
using System.Xml.Serialization;

namespace Runner { public static class SerializationHelper { public static void Save(Schedule shedule) { using (var store = IsolatedStorageFile.GetUserStoreForApplication()) using (var fileStream = store.CreateFile("Schedule.xml")) using (var writer = new StreamWriter(fileStream)) { var ser = new XmlSerializer(typeof(Schedule)); ser.Serialize(writer, 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; } }

}

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(); 
    } 

} 

然後,只需綁定您的視圖到任何類存儲數據...