【问题标题】:Silverlight serialisation/deserialisation problemSilverlight 序列化/反序列化问题
【发布时间】: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


    【解决方案1】:

    几个想法:

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

    【讨论】:

    • 谢谢乔尔。我考虑了第一点,但不喜欢仅仅为了支持序列化而添加额外的公共属性/字段的想法。至于使用派生类:随着我的对象图的复杂性增加,这可能会变得很麻烦。我不想编写自定义例程来处理我创建的每个对象图。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2013-12-25
    • 2017-11-20
    • 2017-06-19
    • 2021-06-10
    相关资源
    最近更新 更多