在ViewModel中更改属性使模型不可序列化?

时间:2010-08-26 16:10:07

标签: wpf mvvm serialization

好吧,我对这个有点困惑。在我的ViewModel上更改不相关的int属性似乎使我的模型不可序列化。

我有一个跟踪与某人联系的最佳时间的对象。它可以设置为Anyday,Weekdays,Evenings,SpecificDays以及Anytime,Mornings,Afternoons,Evenings和SpecificTimes。保存对象后,它将被序列化并发送到WCF服务器。

本质上,该对象是7天的集合。每一天都包含一个星期几的int,一个TimeSpans集合,用于定义当天的良好通话时间,一组布尔标志,用于定义选择了哪些“快捷方式”组(早上,下午,晚上等)

我正在使用MVVM并有一个VM来处理这个类。 VM包含的唯一属性是天数集合是一个int值,其中定义了工作日的“快捷方式”组(工作日,周末等)。

在将“工作日”的“快捷方式”组设置为“SpecificDays”之前,一切正常。保存后,我尝试将对象传递给WCF服务器时出错。错误说它无法使用下面显示的内部异常序列化参数(请记住,WCF错误非常通用,通常根本不指向问题)。这是我正在尝试做的截图:

Sample Image

这对我来说没有意义,因为ShortcutWeekday根本没有发送到WCF服务器。唯一能做的就是收集Days。另一个令人费解的事情是,单击“特定日期”单选按钮,然后单击返回另一个选项将使WCF调用失败。此外,如果问题出在我的班级本身,那么它是否会随时保存失败,而不仅仅是针对特定日子?我使用上面的示例仔细检查了Days集合的属性值,并且对象属性设置完全相同。

内部例外:

"Type 'System.DelegateSerializationHolder+DelegateEntry' with data contract name 
'DelegateSerializationHolder.DelegateEntry:http://schemas.datacontract.org/2004/07/System' 
is not expected. Consider using a DataContractResolver or add any types not known 
statically to the list of known types - for example, by using the KnownTypeAttribute 
attribute or by adding them to the list of known types passed to DataContractSerializer."

ViewModel属性:

// Used to track which Radio Button is selected
private int _selectedWeekdayGroup = 0;

// Object holding the current BestContactTime
private BestContactTime _bestContactTime;

// Shortcut to multiple Days in BestContactTime
public int SelectedWeekdayGroup
{
    get { return _selectedWeekdayGroup; }
    set
    {
        //UpdateCallableDays(value); // This updates the BestContactTime.Days collection
        _selectedWeekdayGroup = value;
        //OnPropertyChanged("SelectedTimesGroups"); // This property is just which set of ShortcutTimes are displayed in checkboxes 
    }
}

BestContactTime:

// Should always have only 7 objects, one per day of week
public ObservableCollection<ContactDay> Days;

联系日:

public int WeekDay;
public SortableObservableCollection<TimeSpan> CallableTimes;
public SortableObservableCollection<bool> CallableTimeGroups;

SortableObservableCollection只是一个继承自ObservableCollection的类,还有一些其他方法,如Sorting和AddRange。

2 个答案:

答案 0 :(得分:2)

看起来设置属性会导致添加事件处理程序 尝试将[field: NonSerialized]添加到活动中。

答案 1 :(得分:2)

您可以使用我的sertool来确认这一点,但我怀疑这只是模型中事件附加非序列化的情况,因此序列化失败。

您可以修复:

[field:NonSerialized]

到违规事件。