【发布时间】:2009-09-24 13:46:34
【问题描述】:
我正在寻找一种将 Silverlight 对象持久保存到用户 PC 上的方法,然后重新水合它们,以便用户完成编辑。
使用DataContractSerializer 进行序列化并坚持到IsolatedStorageFile 工作正常。但是,反序列化会导致问题。以下是导致失败的代码:
private string _FirstNames = string.Empty;
public string FirstNames
{
get { return _FirstNames; }
set
{
new PersonNameValidator().Validate(value); //<-- BOOM 8(
Set(ref _FirstNames, value, () => this.FirstNames);
}
}
反序列化器调用属性设置器,后者又抛出异常并中止反序列化。
我已经尝试显式应用DataContract/DataMember/IgnoreDataMember 属性,但是它不能很好地与私有字段一起使用:
System.Security.SecurityException 发生 Message="数据合约 类型 'Trident.Model.Journey.JourneyApplication' 无法序列化,因为 成员“_TravellerSavingsAmount”是 不公开。公开会员 将修复此错误。或者, 您可以将其设为内部,并使用 InternalsVisibleToAttribute 属性 在您的程序集上,以启用 内部成员的序列化 - 有关更多详细信息,请参阅文档。是 意识到这样做有一定的 安全隐患。”
如何在反序列化期间绕过属性设置器?
我想让我的课程专注于该领域,而不是受到基础设施问题的过多污染。
【问题讨论】:
标签: silverlight datacontractserializer isolatedstorage