Silverlight序列化/反序列化问题

时间:2009-09-24 13:46:35

标签: silverlight datacontractserializer isolatedstorage

我正在寻找一种方法将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);
    }
}

deserialiser调用属性setter,后者又抛出异常并中止反序列化。

我已尝试明确应用DataContract / DataMember / IgnoreDataMember属性,但之后它与私有字段的效果不佳:

  

System.Security.SecurityException   发生消息=“数据合同   类型   'Trident.Model.Journey.JourneyApplication'   无法序列化,因为   成员'_TravellerSavingsAmount'是   不公开。让会员公开   将修复此错误。或者,   你可以把它作为内部,并使用   InternalsVisibleToAttribute属性   在你的程序集上启用   内部成员的序列化 -   有关详细信息,请参阅文档是   意识到这样做是肯定的   安全隐患。“

如何在反序列化期间绕过属性设置器?

我希望我的课程专注于该领域,并且不会因基础设施问题而受到太多污染。

1 个答案:

答案 0 :(得分:0)

一些想法:

  • 序列化仅用于序列化的属性,从而绕过任何验证
  • 序列化父类并使用派生类进行验证