ios - 为什么继承的类不能是json编码
问题描述
我有一个 2 类,其中一个继承自基类
基类
class Member : NSObject , Codable{
var Address : String?
var BriefDescription : String?
var City : String?
}
这是我继承的类:
class MemberSingUp : Member {
var Password : String?
var passwordAgain : String?
var referansNumber : String?
}
我创建了对象,然后将数据加载到其中。
var newMember = MemberSingUp()
newMember.Address = "Adress"
newMember.BriefDescription = "BriefDescription"
newMember.City = "City"
newMember.Password = "123456"
然后我尝试像这样编码这个模型
var memberJson : String = ""
do{
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(newMember)
memberJson = String(data: jsonData, encoding: String.Encoding.utf8)!
}catch{}
print(memberJson)
这memberJson
是{"Address":"Adress","BriefDescription":"BriefDescription","City":"City"}
.
Password
不编码
那么,为什么继承的类对象不编码呢?
更新:根据我使用的评论
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let superdecoder = try container.superDecoder()
try super.init(from: superdecoder)
Password = try container.decode(String.self, forKey: .Password)
}
override func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(Password, forKey: .Password)
let superencoder = container.superEncoder()
try super.encode(to: superencoder)
}
它改变了json,如:
{"Password":"1234567","super":{"Address":"Address","BriefDescription":"BriefDescription","City":"City"}}
如何删除此super
密钥
解决方案
这并不难:
override func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(Password, forKey: .Password)
try super.encode(to: encoder)
}
无需创建嵌套编码器。
它与解码相同:
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
Password = try container.decode(String.self, forKey: .Password)
try super.init(from: decoder)
}
推荐阅读
- mongodb - Mongo Lookup 使用 $id 引用加入集合
- javascript - npm start 错误 - 无法创建本地服务器
- python - 重命名文本后如何摆脱标签?
- ruby-on-rails - Rails自定义验证限制了has_many的数量:允许通过关联?
- tensorflow - 如何将以下用tensor-flow编写的CNN转换为Pytorch中的模型?
- docker - 连接到 docker 内的 Jekyll 服务
- java - 如何在 Java 中访问名称节点上的本地文件?
- android - 将符号上传到 Firebase Crashlytics 时出错
- azure-devops - 在部署后条件下,使用 rest api 任务,我如何根据 xml 响应中的节点值定义成功标准?
- javascript - 带有 id 元素的链接标签在 asp.net 网页中不起作用