好吧,我对这个有点困惑。在我的ViewModel上更改不相关的int属性似乎使我的模型不可序列化。
我有一个跟踪与某人联系的最佳时间的对象。它可以设置为Anyday,Weekdays,Evenings,SpecificDays以及Anytime,Mornings,Afternoons,Evenings和SpecificTimes。保存对象后,它将被序列化并发送到WCF服务器。
本质上,该对象是7天的集合。每一天都包含一个星期几的int,一个TimeSpans集合,用于定义当天的良好通话时间,一组布尔标志,用于定义选择了哪些“快捷方式”组(早上,下午,晚上等)
我正在使用MVVM并有一个VM来处理这个类。 VM包含的唯一属性是天数集合是一个int值,其中定义了工作日的“快捷方式”组(工作日,周末等)。
在将“工作日”的“快捷方式”组设置为“SpecificDays”之前,一切正常。保存后,我尝试将对象传递给WCF服务器时出错。错误说它无法使用下面显示的内部异常序列化参数(请记住,WCF错误非常通用,通常根本不指向问题)。这是我正在尝试做的截图:
这对我来说没有意义,因为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。
答案 0 :(得分:2)
看起来设置属性会导致添加事件处理程序
尝试将[field: NonSerialized]
添加到活动中。
答案 1 :(得分:2)