c#异步序列化
本文关键字:序列化 异步 | 更新日期: 2023-09-27 18:18:52
是否有一种方法来异步序列化类?我问这个是因为当我的程序试图这样做的时候:
public static async void Serialize(List<Zajecia> xml_List)
{
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("Plan list.xml", CreationCollisionOption.ReplaceExisting))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Zajecia>));
using (XmlWriter xmlWriter = XmlWriter.Create(stream, new XmlWriterSettings() { Indent = true }))
{
serializer.Serialize(xmlWriter, xml_List);
}
}
}
类:public class Zajecia
{
public string c { get; set; }
public string p { get; set; }
public Zajecia ()
{}
public Zajecia(string C, string P)
{
c = C;
p = P;
}
}
我的异步序列化用于导航函数:
protected override async Task OnNavigatedTo(NavigationEventArgs e)
{
string t = e.Parameter as string;
if (!string.IsNullOrEmpty(t))
{
string[] _p = new string[10];
_p = t.Split('^');
_lista.Add(new Zajecia(t,( _p[3]+"("+_p[5]+")")));
Dodaj_zajecia(_p);
await Serialize(_lista);
}
else
base.OnNavigatedTo(e);
}
我只得到这个错误,而不是序列化任何东西:
System.Runtime.InteropServices.WindowsRuntime。RuntimeClass是由于其保护级别,无法进入。只有公共类型可以处理。
程序中的所有内容都是公开的,但仍然没有帮助。有什么办法吗?
UPDATE 2
我检查了你的项目。问题是,你在BasicPage1
类中声明了Zajecia
类。您必须将其声明为单独的类文件或在命名空间范围内。
namespace Plan
{
public class Zajecia
{
.....
}
public sealed partial class BasicPage1 : Plan.Common.LayoutAwarePage
{
.....
}
}
错误的方式
namespace Plan
{
public sealed partial class BasicPage1 : Plan.Common.LayoutAwarePage
{
public class Zajecia
{
.....
}
.....
}
}
更新1
这是你的代码。
public static async Task Serialize(List<Zajecia> xml_List)
{
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("Plan list.xml", CreationCollisionOption.ReplaceExisting))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Zajecia>));
using (XmlWriter xmlWriter = XmlWriter.Create(stream, new XmlWriterSettings() { Indent = true }))
{
serializer.Serialize(xmlWriter, xml_List);
}
}
}
当你想调用方法时,使用await
作为前缀,假设任何按钮点击事件调用该方法,那么我将这样写。
假设Helper
是静态类
private async void btnSerialize_Click(object sender, RoutedEventArgs e)
{
await Helper.Serialize(MyZajeciaList);
}
标记一件事,我使用async void
修饰符点击事件。
假设我从DoWork(...)
等任何其他方法调用方法,那么我将使用async Task
而不是async void
private async Task DoWork(List<Zajecia> MyZajeciaList)
{
await Helper.Serialize(MyZajeciaList);
}
你的代码是为我工作只是改变返回类型的Serialize
方法从void
到Task
。您需要调用方法为await Serialize(...);