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

标签 json serialization 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")

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)。

替代可以是JSONCodableSwagger's 使用代码生成器。

关于json - Swift 中对象的自动 JSON 序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820720/

相关文章:

xcode - 添加 Swift 文件后无法运行测试

c++ - 使用 boost 序列化将 C++ 中的对象序列化为二进制格式以便通过套接字使用是否安全?

java - 覆盖java序列化不匹配

ios - 键盘高度变化观察器

ios - 使用字典值填充 tableView 内的 collectionView 标签

c++ - 文件解析中奇怪的对象序列化问题

java - POST 对象的 facebook 格式(到墙上)

json - 为什么我不能创建 Array<[String : Any]>? Work with Alamofire (Swift)

javascript - 在 JavaScript 中将音频从 getUserMedia() 编码为 .OGG

javascript - 获取json编码形式的信息