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

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

现在,这是我的问题:

  1. 如何序列化 person 实例并获取上述 JSON,而无需手动将类的所有属性添加到转换为 JSON 的字典中?
  2. 如何反序列化上述 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 使用代码生成器。

https://stackoverflow.com/questions/26820720/

相关文章:

json - 是否为 null 有效 JSON(4 字节,仅此而已)

javascript - jQuery AJAX 调用带有 JSON 返回的 PHP 脚本

python - 通过url获取json数据并在python中使用(simplejson)

java - 将元数据添加到 RESTful JSON 响应的最佳实践是什么?

javascript - 如何让 AngularJS 输出转义 HTML

json - IE9 JSON 数据 "do you want to open or save th

javascript - 从 JSON 对象中删除元素

xml - 为什么人们希望将 Json 和 XML 作为输出传递到他们的 REST 接口(inter

wcf - DataContractJsonSerializer 和枚举

php - 如何在预先存在的 SQL 数据库之上使用 Elastic Search?