Serialization 为什么';MVVMT是否具有导航对象的内部序列化?
我看过一些讨论MvvmCross中视图模型之间传递导航对象的线程(例如和),我想知道为什么MvvmCross没有为复杂类型的序列化构建int支持 让我澄清一下。如果我有一个由CustomerName(字符串)和RecentPurchases(列表)组成的导航对象,其中PurchaseType是一个具有一些基本类型属性的类,那么当我将此导航对象传递给ShowViewModel时,在接收端,我将获得正确的CustomerName,RecentPurchases为null。MvvmCross不认为列表对于序列化来说足够简单。通过用SerializedRecentPurchases替换RecentPurchases并按如下方式分配其值,可以轻松解决此问题:Serialization 为什么';MVVMT是否具有导航对象的内部序列化?,serialization,navigation,viewmodel,mvvmcross,Serialization,Navigation,Viewmodel,Mvvmcross,我看过一些讨论MvvmCross中视图模型之间传递导航对象的线程(例如和),我想知道为什么MvvmCross没有为复杂类型的序列化构建int支持 让我澄清一下。如果我有一个由CustomerName(字符串)和RecentPurchases(列表)组成的导航对象,其中PurchaseType是一个具有一些基本类型属性的类,那么当我将此导航对象传递给ShowViewModel时,在接收端,我将获得正确的CustomerName,RecentPurchases为null。MvvmCross不认为列表
SerializedRecentPurchases = Mvx.Resolve<IMvxJsonConverter>()
.SerializeObject(RecentPurchases);
SerializedRecentPurchases=Mvx.Resolve()
.序列化对象(最近购买);
以类似的方式,字符串在ViewModels的Init方法中被反序列化
这一切都很简单,但我有点困惑,为什么MvvmCross不尝试执行序列化,从而避免开发人员一次又一次地编写这些代码行。我知道我们必须小心使用导航对象传递大量数据,但另一方面,导航(或持久状态)对象可能包含简单复杂类型的集合是很常见的,因此如果MvvmCross支持这种开箱即用的方案,不是更实用吗?原因是什么v3中引入了导航的“简单序列化”功能,包括:
- 我们希望消除MvvmCross对任何Json序列化程序的依赖性-我们喜欢Json.Net,我们喜欢ServiceStack文本,但我们希望人们能够在发布应用程序时,如果他们愿意的话,可以同时使用这两种文本
- 我们的目的是,如果人们愿意,可以很容易地切换回Json
- 这应该可以只使用设置中的一行,但当前有一个针对此的错误记录-请参阅
- 即使有了这个开放的bug,使用一个基类和代码(如您的问题或中所示)处理4行代码仍然很容易
- 还有一些方法可以将简单的序列化扩展到更复杂的对象,但这些方法也与这个问题有关
- 我们想让人们更清楚地知道序列化正在发生(感觉“为什么我不能传递对象”是一个常见问题)
- 我们试图阻止人们序列化大型对象
- 因为这很慢
- 而且因为WindowsPhone特别对可以使用的Xaml Uri的大小有很小的限制(有一个2050个字符的.Net
限制,但在这个限制之下,我相信WP限制更小——大约1100个字符)Uri
- v3进度幻灯片-
- 一只黑猩猩出生了-
- 机器人用交叉灯-
- iOS-
然而,就MvvmCross本身而言,我个人仍然建议不要在序列化过程中传递大型复杂对象-我的导航对象很少是临时的,因此对我来说,将
键传递给对象比传递给对象本身“感觉更好”。感谢Stuart给出了一个很好的答案。我并不完全同意JSON部分——只要我们讨论内部Mvx序列化,就不应该管使用什么序列化格式和风格。这对开发者来说是透明的。但说到保持对象的小型化,你是绝对正确的:我没有意识到,在某些移动平台上,导航对象的数据量仅限于约1000字节。尽管如此,我还是认为修复这个bug是值得的,这样就有了对小型复杂对象的内在支持。