저는 처음으로 Windows Store App에 있었으며 Deserialization/내 응용 프로그램 데이터로드와 관련된 문제가 있습니다.비동기 파일 비 직렬화
JSon을 사용하여 클래스 객체를 문자열로 직렬화 한 다음 응용 프로그램 로컬 응용 프로그램 폴더에 저장합니다.
데이터를로드 할 시간이되면 실행시로드가 실패하고 데이터가로드되지 않습니다. 내 수업은 새로운 수업으로 인스턴스화됩니다.
하지만 내 코드를 실행할 때 내 단계가 디버그 모드로 진행됩니다. Desirialization 작업이 정상적으로 수행되고 클래스가 올바르게로드됩니다.
문제는 내 비동기 구현에서 비롯된 것 같습니다. 그러나 나는 어디에서 말할 수 없다.
나를 도와 줄 수 있습니까?
저장 절차 :
public virtual void Save()
{
var data = JsonConvert.SerializeObject(this);
WriteTotextFileAsync("Cashier.Data.Config", data);
}
public static async void WriteTotextFileAsync(string fileName, string contents)
{
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, contents);
}
로드 절차 :
private async void LoadConfig()
{
string data;
if (Config == null)
{
data = await ReadTextFileAsync("Cashier.Data.Config");//.ConfigureAwait(false);
if (data != null && data.Length > 0)
try
{
System.Diagnostics.Debug.WriteLine(data);
Config = JsonConvert.DeserializeObject<Data.Config>(data);
System.Diagnostics.Debug.WriteLine(data);
}
catch (Exception ex)
{
var dlg = new MessageDialog("Desirialization erreur" + Environment.NewLine + ex.Message);
dlg.ShowAsync();
Config = new Config();
}
else
{
System.Diagnostics.Debug.WriteLine("Config = new Config();");
Config = new Config();
}
}
}
public static async Task<string> ReadTextFileAsync(string path)
{
var folder = ApplicationData.Current.LocalFolder;
try
{
var file = await folder.GetFileAsync(path);
var value = await FileIO.ReadTextAsync(file);
return value;
}
catch (System.IO.FileNotFoundException ex)
{
return string.Empty;
}
}
답장을 보내 주셔서 감사합니다. 저는 비동기 및 작업을 제안했으나 동작을 변경하지 않았습니다. 어디 exacty 저장 설정 절차를 호출하는 가장 좋은 장소는 무엇입니까? App.xaml.cs의 "OnSuspending"이벤트에서? – Hugo