0

기록 항목 개체가 채워진 내 기록 목록을 저장하고로드하고 싶습니다. 격리 저장소를 통해이 작업을 수행하려고합니다. 사용자가 응용 프로그램을 열고 닫을 때 인터넷 사용 기록이 손실되지 않습니다. 앱이 클릭되면로드 될 수있는 저장됩니다. 나는 주변을 둘러 보았고이 질문을 stackoverflow에서 보았습니다. 그리고 나는 그것을 따라하려고 시도했지만 오류를 보았습니다. Isolated Storage & Saving Multiple Objects.Windows 8 phone 개체 목록 저장 및로드

using System.Xml.Serialization; 
using System.Collections.ObjectModel; 
using System.IO; 

List<HistoryEntry> urls = new List<HistoryEntry>(); 
public HistoryEntry selectedHistory; 

public MainPage() 
{ 
    InitializeComponent(); 
    Deserialize<>(urls, ???); 
} 

void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    HistoryEntry urlObj = new HistoryEntry(); 
    urlObj.URL = url; 
    urlObj.timestamp = DateTime.Now.ToString("HH:mm"); 
    urlObj.date = url.Remove(url.LastIndexOf('.')); 
    urls.Add(urlObj); 

    textBox1.Text = url; 
    listBox.ItemsSource = null; 
    listBox.ItemsSource = urls; 

    Serialize(urlObj, urls); 
} 

private static void Serialize(string fileName, object source) 
{ 
    var userStore = IsolatedStorageFile.GetUserStoreForApplication(); 
    using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, userStore)) 
    { 
     XmlSerializer serializer = new XmlSerializer(source.GetType()); 
     serializer.Serialize(stream, source); 
    } 
} 

public static void Deserialize<T>(ObservableCollection<T> list, string filename) 
{ 
    list = new ObservableCollection<T>(); 
    var userStore = IsolatedStorageFile.GetUserStoreForApplication(); 
    if (userStore.FileExists(filename)) 
    { 
     using (var stream = new IsolatedStorageFileStream(filename, FileMode.Open, userStore)) 
     { 
      XmlSerializer serializer = new XmlSerializer(list.GetType()); 
      var items = (ObservableCollection<T>)serializer.Deserialize(stream); 
      foreach (T item in items) 
      { 
       list.Add(item); 
      } 
     } 
    } 
} 

직렬화 드의 직렬화를 호출 할 때와 같은 일부 잘못된 인수가 :

여기에 코드

public string URL { get; set; } 
public string timestamp { get; set; } 
public string date { get; set; } 

MainPage 코드 HistoryEntry 클래스입니다. 메소드에 보낼 적절한 값은 무엇이며, 히스토리 오브젝트를 저장하고로드 할 것입니다. 당신이

+0

FileMode가 존재하지 않는 것은 네임 스페이스를 추가하지 않은 것을 의미합니다. 이걸 가지고 있는지 확인하십시오. 'using System.IO Namespace; – Kulasangar

+0

고맙습니다. 편집을 완료했습니다. Serialize 및 Deserialize를 호출하는 동안 오류가 있지만 잘못된 인수가 있기 때문에 @anonshankar – user3795349

답변

0

당신이 그것을 위해 일했다 MemoryStream를 사용하여이 방법을 시도해 봤어 코멘트 나는 더 자세히 :) 설명해 드리겠습니다 더 자세한 내용이 필요하면

사전 :

에 감사드립니다 승 8 :

Serialize 사람 :

MemoryStream sessionData = new MemoryStream(); 
DataContractSerializer serializer = new 
DataContractSerializer(typeof(ObservableCollection<NewsByTag>)); 
serializer.WriteObject(sessionData, data); 
StorageFile file = await ApplicationData.Current.LocalFolder 
        .CreateFileAsync(sFileName); 
using (Stream fileStream = await file.OpenStreamForWriteAsync()) 
{ 
sessionData.Seek(0, SeekOrigin.Begin); 
await sessionData.CopyToAsync(fileStream); 
await fileStream.FlushAsync(); 
} 

Deserialize를 백업하려면 :

StorageFile file = await ApplicationData.Current.LocalFolder. 
         GetFileAsync(sFileName); 
using (IInputStream inStream = await file.OpenSequentialReadAsync()) 
{ 
DataContractSerializer serializer = 
new DataContractSerializer(typeof(ObservableCollection<NewsByTag>)); 
var data = (ObservableCollection<NewsByTag>)serializer 
       .ReadObject(inStream.AsStreamForRead()); 
} 

희망 하시겠습니까?