我正在寻找一种在 Swift 中自动序列化和反序列化类实例的方法。假设我们已经定义了以下类……
class Person {
let firstName: String
let lastName: String
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
}
… 和 Person
实例:
let person = Person(firstName: "John", lastName: "Doe")
person
的 JSON 表示形式如下:
{
"firstName": "John",
"lastName": "Doe"
}
现在,这是我的问题:
- 如何序列化
person
实例并获取上述 JSON,而无需手动将类的所有属性添加到转换为 JSON 的字典中? - 如何反序列化上述 JSON 并返回静态类型为
Person
类型的实例化对象?同样,我不想手动映射属性。
以下是在 C# 中使用 Json.NET 的方法:
var person = new Person("John", "Doe");
string json = JsonConvert.SerializeObject(person);
// {"firstName":"John","lastName":"Doe"}
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
最佳答案
如WWDC2017所示@ 24:48 (Swift 4),我们将能够使用 Codable 协议(protocol)。示例
public struct Person : Codable {
public let firstName:String
public let lastName:String
public let location:Location
}
序列化
let payload: Data = try JSONEncoder().encode(person)
反序列化
let anotherPerson = try JSONDecoder().decode(Person.self, from: payload)
请注意,所有属性都必须符合 Codable 协议(protocol)。
替代可以是JSONCodable由 Swagger's 使用代码生成器。
关于json - Swift 中对象的自动 JSON 序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820720/