2015-10-08 20 views
6

从iOS开始,我对iOS很陌生。使用J2ObjC和GSON库将Swift类序列化为JSON

我们拥有我们使用J2ObjC其翻译成目标C.

我已经逐渐把在图书馆,到目前为止,这么好几家图书馆的Android应用程序。

然而,翻译谷歌的GSON库后,我在那里,如果我尝试使用转换的方法toJsonWithId我遇到的问题一个问题:我收到以下错误

let gson = ComGoogleGsonGson() 
    let swiftTest = GsonSwiftTest() 
    swiftTest.name = "Ricky" 
    print(gson.toJsonWithId(swiftTest)) 

libc++abi.dylib: terminating with uncaught exception of type JavaLangAssertionError

此外它显示:

Terminating app due to uncaught exception 'JavaLangAssertionError', reason: 'unknown Java type encoding'

我的Swift类是:

import Foundation 

@objc 
public class GsonSwiftTest : NSObject { 

    var name:String? 

} 

如果我在Swift项目中使用Objective C类,将它添加到桥接头并使用Objective C类,它工作正常。

我相信这是我的一个误解,但我无法找到答案,为什么这不起作用。检查J2ObjC源代码显示当无法找到类的类型时会引发错误。

如果有人可以帮助解释这个问题的原因,它将不胜感激。

谢谢!

回答

4

有一种更简单的方法来序列化Swift实例:直接使用Foundation类NSJSONSerialization。以下是相关博客文章:JSON Serialization in Swift

您的测试在Swift中失败的原因是,并非所有的Swift类都扩展NSObject,其中j2objc映射到java.lang.Object。所有的Java序列化框架都假设/要求所有的类扩展Object,就像它们在Java中一样。

对于跨平台API,我建议创建一个简单的序列化/反序列化接口,然后使用GSON为Android实现一次,并使用NSJSONSerialization本地实现一次。 Swift正在迅速发展,所以如果有更好的序列化机制可用,您的项目可以轻松利用它,而不会影响Android端口。

+1

谢谢汤姆,我知道NSJSONSerialization,我只是想了解失败的原因,现在你已经解释了。感谢您在图书馆的辛勤工作。 – Ricky

相关问题