已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.
两年前就关门了。
Improve this question
我正在决定是使用Moshi by square还是Gson来序列化和反序列化模型数据。
有一件事我一直不喜欢Gson是我认为它使用反射,这可能是缓慢的android?莫希也使用反射吗?
什么是一些优点和缺点的莫希vs Gson?
我认为它们是相似的。
class CardAdapter {
@ToJson String toJson(Card card) {
return card.rank + card.suit.name().substring(0, 1);
}
@FromJson Card fromJson(String card) {
if (card.length() != 2) throw new JsonDataException("Unknown card: " + card);
char rank = card.charAt(0);
switch (card.charAt(1)) {
case 'C': return new Card(rank, Suit.CLUBS);
case 'D': return new Card(rank, Suit.DIAMONDS);
case 'H': return new Card(rank, Suit.HEARTS);
case 'S': return new Card(rank, Suit.SPADES);
default: throw new JsonDataException("unknown suit: " + card);
}
}
}
且要使用它,就像在gson中一样注册它:
Moshi moshi = new Moshi.Builder()
.add(new CardAdapter())
.build();
我想优点是typeAdapter中使用的注解。我希望了解如果我切换到莫希,是否会有任何性能提升。
3条答案
按热度按时间mqkwyuun1#
莫希使用Okio优化了一些Gson没有的东西。
如果您已经在使用Okio串流,这些最佳化的优点会特别明显。Retrofit和OkHttp的使用者尤其会从莫希中获益。
关于莫希起源的进一步讨论在我的帖子Moshi, another JSON Processor中。
pobjuy322#
根据swankjesse's comment on reddit:
我为自己在Gson上的工作感到自豪,但也对它的一些局限性感到失望。我想解决这些问题,但不是作为“Gson 3.0”,部分原因是我不再为谷歌工作了。杰克、斯科特、埃里克和我创建了莫希来解决Gson的各种局限性。这里有10个小理由让我们更喜欢Moshi而不是Gson:
1.即将推出的Kotlin支持。
1.像@HexColor int这样的限定符允许单个Java类型有多个JSON表示。
1.@ToJson和@FromJson使编写和测试自定义JSON适配器变得很容易。
1.可预测的异常。莫希在IO问题上抛出IOException,在类型不匹配时抛出JsonDataException。Gson到处都是。
1.你将发布一个较小的APK。Gson是227 KiB,莫希+Okio加起来是200 KiB。
1.莫希不会将平台类型的实现细节泄漏到编码的JSON中。这让我对Gson感到害怕:(简单时区)
1.默认情况下,莫希并不做奇怪的HTML转义,看看Gson的默认编码“12 & 5 = 4”就知道了。
1.默认情况下,未安装损坏的Date适配器。
如果你正在写新代码,我强烈建议你从莫希开始。如果你已经有一个Gson的项目,如果升级简单而且没有风险的话,你应该升级。否则就坚持使用Gson!我正在尽我最大的努力确保它保持兼容和可靠。
w8ntj3qf3#
从前面的链接中,您可以看到使用莫希代码生成器将创建编译时适配器来对类建模,这将删除运行时中反射的使用。
型号
应用程序/构建.gradle
将生成一个MyModelJsonAdapter类,并进行验证以确保模型属性的可空性。