我看过一些讨论在 MvvmCross 中的视图模型之间传递导航对象的线程(例如here和here),我想知道为什么 MvvmCross 没有对复杂类型的序列化的内置支持。
让我澄清一下。如果我有一个由 CustomerName(字符串)和 RecentPurchases(列表)组成的导航对象,其中购买类型是具有一些原始类型属性的类,那么当我将此导航对象传递给 ShowViewModel 时,在接收端我会得到一个正确的 CustomerName 和最近购买的 null。MvvmCross 无法将 List 识别为足够简单的序列化。这可以通过用 SerializedRecentPurchases 替换 RecentPurchases 并像这样分配它的值来轻松解决:
SerializedRecentPurchases = Mvx.Resolve<IMvxJsonConverter>()
.SerializeObject(RecentPurchases);
以类似的方式,字符串在 ViewModels 的 Init 方法中被反序列化。
这一切都很简单,但我有点疑惑为什么 MvvmCross 不尝试执行序列化,从而使开发人员不必一次又一次地编写这些代码行。我知道我们必须小心使用导航对象传递大量数据,但另一方面,导航(或持久状态)对象可能包含简单复杂类型的集合是很常见的,所以如果MvvmCross 开箱即用支持这种场景吗?