C# 序列化多个对象 类AppDataManager { 公共静态异步任务SaveAsync(T数据,字符串文件名) { StorageFile file=Wait ApplicationData.Current.LocalFolder.CreateFileAsync(文件名, CreationCollisionOption.GenerateUniqueName); var stream=await file.OpenStreamForWriteAsync(); var serializer=新的DataContractSerializer(typeof(T)); serializer.WriteObject(流、数据); 等待stream.FlushAsync(); } 公共静态异步任务RestoreAsync(字符串文件名) { 尝试 { var file=wait ApplicationData.Current.LocalFolder.GetFileAsync(文件名); var instream=await file.OpenStreamForReadAsync(); var serializer=新的DataContractSerializer(typeof(T)); return(T)serializer.ReadObject(instream); } 捕获(例外) { 返回默认值(T); } } } 受保护的异步重写无效OnNavigatedTo(NavigationEventArgs e) { 等待AskUserToLocalDataAsync(); 如果(使用本地数据) { SomethingGoesher=等待AppDataManager.RestoreAsync(文件名); } }
代码运行良好,但它只返回一个对象,我希望编写多个对象并将其作为observableCollection检索,以将其绑定到GridView。GenerateUniqueName将附加多个对象C# 序列化多个对象 类AppDataManager { 公共静态异步任务SaveAsync(T数据,字符串文件名) { StorageFile file=Wait ApplicationData.Current.LocalFolder.CreateFileAsync(文件名, CreationCollisionOption.GenerateUniqueName); var stream=await file.OpenStreamForWriteAsync(); var serializer=新的DataContractSerializer(typeof(T)); serializer.WriteObject(流、数据); 等待stream.FlushAsync(); } 公共静态异步任务RestoreAsync(字符串文件名) { 尝试 { var file=wait ApplicationData.Current.LocalFolder.GetFileAsync(文件名); var instream=await file.OpenStreamForReadAsync(); var serializer=新的DataContractSerializer(typeof(T)); return(T)serializer.ReadObject(instream); } 捕获(例外) { 返回默认值(T); } } } 受保护的异步重写无效OnNavigatedTo(NavigationEventArgs e) { 等待AskUserToLocalDataAsync(); 如果(使用本地数据) { SomethingGoesher=等待AppDataManager.RestoreAsync(文件名); } },c#,.net,windows-8,C#,.net,Windows 8,代码运行良好,但它只返回一个对象,我希望编写多个对象并将其作为observableCollection检索,以将其绑定到GridView。GenerateUniqueName将附加多个对象 如何储存?以及如何检索它?创建一个带有属性的类,该属性将保存您的集合。然后序列化该类。我建议为对象创建一个集合类 例如,小部件对象: class AppDataManager { public static async Task SaveAsync<T>(T data, string fi
如何储存?以及如何检索它?创建一个带有属性的类,该属性将保存您的集合。然后序列化该类。我建议为对象创建一个
集合
类
例如,小部件
对象:
class AppDataManager
{
public static async Task SaveAsync<T>(T data, string fileName)
{
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName,
CreationCollisionOption.GenerateUniqueName);
var stream = await file.OpenStreamForWriteAsync();
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(stream ,data);
await stream.FlushAsync();
}
public static async Task<T> RestoreAsync<T>(string fileNa me)
{
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
var instream = await file.OpenStreamForReadAsync();
var serializer = new DataContractSerializer(typeof(T));
return (T)serializer.ReadObject(instream);
}
catch (Exception)
{
return default(T);
}
}
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
await AskUserToLocalDataAsync();
if (useLocalData)
{
SomethingGoesHere = await AppDataManager.RestoreAsync<UserData>(fileName);
}
}
然后,您可以创建一个WidgetCollection
类:
[DataContract]
public class Widget
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Value { get; set; }
}
[DataContract]
公共类WidgetCollection
{
[数据成员]
公共列表小部件{get;set;}
}
您可以对WidgetCollection
进行序列化/反序列化,然后通过foreach
将其添加到observedcollection
另外,使用语句将您的
IDisposable
对象(如irandomaccesstream
)包装在中,以便正确处理它们。不要接受异常
[DataContract]
public class WidgetCollection
{
[DataMember]
public List<Widget> Widgets { get; set; }
}