使用 J2ObjC 和 GSON 库将 Swift class 序列化为 JSON
Serializing a Swift class to JSON using J2ObjC and GSON library
我是 iOS 的新手,刚开始 Android 开发。
我们有一个 Android 应用程序,它有几个库,我们正在使用 J2ObjC 将其转换为 Objective C。
我一直在逐步带入图书馆,到目前为止一切顺利。
但是,在翻译 Google 的 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'
我的Swiftclass是:
import Foundation
@objc
public class GsonSwiftTest : NSObject {
var name:String?
}
如果我在我的 Swift 项目中使用 Objective C class,请将其添加到桥接 header 并使用 Objective C class 它工作正常。
我认为这是我的误会,但我找不到关于为什么这不起作用的答案。检查 J2ObjC 源代码显示当找不到 class 的类型时会引发错误。
如果有人能帮忙解释一下这个问题的原因,我们将不胜感激。
谢谢!
有一种更简单的方法来序列化 Swift 个实例:直接使用 Foundation class NSJSONSerialization。这是一篇相关的博文:JSON Serialization in Swift.
您的测试在 Swift 中失败的原因是并非所有 Swift class 都扩展 NSObject,j2objc 映射到 java.lang.Object。所有 Java 个序列化框架 assume/require 所有 class 都扩展对象,就像它们在 Java 中所做的那样。
对于跨平台 API,我建议创建一个简单的 serialize/unserialize 接口,然后使用 GSON 为 Android 实现一次,并使用 NSJSONSerialization 本机实现一次。 Swift 正在迅速发展,因此如果有更好的序列化机制可用,您的项目可以轻松利用它而不会影响 Android 端口。
我是 iOS 的新手,刚开始 Android 开发。
我们有一个 Android 应用程序,它有几个库,我们正在使用 J2ObjC 将其转换为 Objective C。
我一直在逐步带入图书馆,到目前为止一切顺利。
但是,在翻译 Google 的 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'
我的Swiftclass是:
import Foundation
@objc
public class GsonSwiftTest : NSObject {
var name:String?
}
如果我在我的 Swift 项目中使用 Objective C class,请将其添加到桥接 header 并使用 Objective C class 它工作正常。
我认为这是我的误会,但我找不到关于为什么这不起作用的答案。检查 J2ObjC 源代码显示当找不到 class 的类型时会引发错误。
如果有人能帮忙解释一下这个问题的原因,我们将不胜感激。
谢谢!
有一种更简单的方法来序列化 Swift 个实例:直接使用 Foundation class NSJSONSerialization。这是一篇相关的博文:JSON Serialization in Swift.
您的测试在 Swift 中失败的原因是并非所有 Swift class 都扩展 NSObject,j2objc 映射到 java.lang.Object。所有 Java 个序列化框架 assume/require 所有 class 都扩展对象,就像它们在 Java 中所做的那样。
对于跨平台 API,我建议创建一个简单的 serialize/unserialize 接口,然后使用 GSON 为 Android 实现一次,并使用 NSJSONSerialization 本机实现一次。 Swift 正在迅速发展,因此如果有更好的序列化机制可用,您的项目可以轻松利用它而不会影响 Android 端口。