一尘不染

Swift中对象的自动JSON序列化和反序列化

swift

我正在寻找一种在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")

的JSON表示形式person如下:

{
    "firstName": "John",
    "lastName": "Doe"
}

现在,这是我的问题:

  1. 我如何序列化person实例并获取上面的JSON,而不必手动将类的所有属性添加到变成JSON的字典中?
  2. 我如何反序列化上面的JSON并获取静态类型为类型的实例化对象Person?同样,我不想手动映射属性。

这是使用Json.NET在C#中执行此操作的方法:

var person = new Person("John", "Doe");
string json = JsonConvert.SerializeObject(person);
// {"firstName":"John","lastName":"Doe"}

Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);

阅读 490

收藏
2020-07-07

共1个答案

一尘不染

WWDC2017 @ 24:48(
Swift 4 )所示,我们将能够使用Codable协议。例

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协议。

一个 替代方案
可以是JSONCodable其用于通过扬鞭的代码生成器。

2020-07-07