2013-10-24 54 views
3

我已经看过一些讨论在MvvmCross视图模型之间传递导航对象的线索(例如herehere),我想知道为什么MvvmCross没有内建的对复杂类型序列化的支持。为什么MvvmCross没有导航对象的内在序列化?

让我澄清一下。如果我有一个由客户名称(字符串)和RecentPurchases(列表)的浏览对象,其中购买的类型是用几个基本类型属性的类,然后当我通过此导航对象ShowViewModel,在接收侧I将得到一个正确的CustomerName和null为RecentPurchases。列表不被MvvmCross识别为足够简单的序列化。这可以很容易地固定通过用SerializedRecentPurchases替换RecentPurchases并分配它的值是这样的:

SerializedRecentPurchases = Mvx.Resolve<IMvxJsonConverter>() 
          .SerializeObject(RecentPurchases); 

以类似的方式将字符串中的ViewModels' Init方法反序列化。

现在的情况很简单,但我有点不解,为什么MvvmCross不尝试从一次又一次地写几行代码进行系列化开发节能。我知道我们必须要小心传递大量的数据与导航的对象,但在另一方面,它是相当常见的导航(或持续状态)的对象可能包含简单的复杂类型的集合,所以它不会是,如果更实际MvvmCross支持这种开箱即用的方案吗?

回答

8

为什么“简单的序列化”导航v3中引入的理由是:

  • 我们希望,以消除任何JSON序列MvvmCross的依赖 - 我们爱Json.Net,我们爱ServiceStack文本我们希望人们能够船舶应用与没有这些,如果他们想
  • 我们预期,这将是很容易切换到JSON如果人们想
    • 这应该只使用成为可能设置一行 - 但有一个错误当前登录对此 - 看到https://github.com/MvvmCross/MvvmCross/issues/450
    • 即使有这个开放的bug,它仍然很容易做~4行使用基类和类似于你的问题所示的代码或在the linked question
    • 也有办法了简单的序列应该是可扩展到更复杂的对象 - 但这些都还链接到450的问题。
  • 我们想让它更有目共睹的是序列化正在发生(的感觉就像“我为什么不能传递一个对象”是一个FAQ)
  • 我们想尝试从连载劝阻的人大的对象
    • 因为这是缓慢
    • 和因为WindowsPhone的尤其对可使用的(有〜的字符2050。净Uri限制XAML中URI的尺寸相当小的限制,但下面说我相信WP的限制更小 - 大约1100个字符)

,那岂不是更实际的,如果MvvmCross支持此方案的开箱?

可能 - 那就是“1号线的设置变化”,这https://github.com/MvvmCross/MvvmCross/issues/450当前正在阻止

有些情况下路过基于列表的复杂的可能是方便的意图 - 有几个平台,其没有WindowsPhone的导航限制。

为了解决这个问题,的MvvmCross V3的主要目标之一是“项目CHIMP”也被称为“Crosslight公司”。 CHIMP的目的是来拆分MvvmCross成单独的CROSSCORE,装订,MVVM和插件层 - 的想法是,这种结构应该让别人更容易建立自己的应用程序框架。正因为如此,它应该很容易为他人现在提供替代的框架 - 可能包括完全不同的导航服务模式。

有更多的项目黑猩猩/ Crosslight公司:

Howeve R,内MvvmCross本身我个人还是建议序列化过程中通过大量复杂的对象 - 很少有我的导航对象是临时所以我一般“感觉更好”传递key s到对象,而不是对象本身。

+0

感谢斯图尔特为一个伟大的答案。我并不完全同意JSON部分 - 只要我们正在讨论内部Mvx序列化,不管什么序列化格式和使用哪种风味都不重要。无论如何,这对开发者来说都是透明的。但是当保持对象较小时,你是绝对正确的:我没有意识到在一些移动平台上,你只能使用ca.导航对象的1000字节数据。不过,我认为值得修正这个错误,以便对小复杂对象有内在的支持。 –

相关问题