[英]How can I populate back my list with objects read from .txt file? (C# UWP)
我不熟悉 UWP 應用程序中的 FileIO,但我設法使用我在此站點上找到的方法將我的列表保存到 .txt 文件。 問題是,我不知道如何讀取文件並用這些對象填充我的列表。 我的對象類如下所示:
public class Item : ObservableObjectBase
{
private string id;
public string ID
{
get => id;
set => SetAndNotifyIfChanged(ref id, value);
}
private string description;
public string Description
{
get => description;
set => SetAndNotifyIfChanged(ref description, value);
}
private int quantity;
public int Quantity
{
get => quantity;
set => SetAndNotifyIfChanged(ref quantity, value);
}
private Category category;
public Category Category
{
get => category;
set => SetAndNotifyIfChanged(ref this.category, value);
}
private int price;
public int Price
{
get => price;
set => SetAndNotifyIfChanged(ref price, value);
}
其中類別是:
public class Category : ObservableObjectBase
{
private string name;
public string Name
{
get => name;
set => SetAndNotifyIfChanged(ref name, value);
}
private bool isSensitive;
public bool IsSensitive
{
get => isSensitive;
set => SetAndNotifyIfChanged(ref isSensitive, value);
}
我設法將這些Item
對象保存到這樣的文件中:
private async void Button_Click_2(object sender, RoutedEventArgs e)
{
var sortedLines = itemlist.OrderBy(i => i.ID)
.Select(i => $"{i.ID}*{i.Category.ToString()}*{i.Description}*{i.Price.ToString()}*{i.Quantity.ToString()}");
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync("data.txt", CreationCollisionOption.ReplaceExisting);
if (file != null)
{
await FileIO.WriteLinesAsync(file, sortedLines);
}
}
在這里,我將 Category 保存為字符串,其覆蓋的ToString
方法如下所示:
private string IsSensitiveAsString => IsSensitive ? "[S]" : "";
public override string ToString() => $"{Name} {IsSensitiveAsString}";
在文本文件中,我用 * 分隔了屬性,因為描述可能很長,並且可以包含逗號、空格等等。 添加 2 個項目后,這就是它們在文本文件中的顯示方式:
ABC123*SUV *Item1's description. Contains spaces! *3000*40
DEF456*OldTimer [S]*Item2's description. This one can be really long too!!*5400*82
考慮到它是一個 UWP 應用程序,我完全迷失了我可以執行此操作的方法,我可以執行單個字符串,但我不知道如何將我的 Category 轉換回其 Name 和 IsSensitive 屬性。 此外,如果項目的描述太長,文本文件中可能會有多行,我不確定這是否會導致一些問題。 任何幫助將不勝感激!
如何使用從 .txt 文件中讀取的對象填充我的列表? (C# UWP)
正如@Michał Turczyn 所說,更好的方法是將列表序列化為 JSON 字符串,並使用 JSON 反序列化檢索列表對象。
例如。
連載
var items = new ObservableCollection<string>() { "hee", "ss", "dasde" };
string output = JsonConvert.SerializeObject(items);
反序列化
string json = await Windows.Storage.FileIO.ReadTextAsync(file);
var items = JsonConvert.DeserializeObject<ObservableCollection<string>>(json);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.