json - 使用 JSONEncoder 编码子类
问题描述
我现在坐在这里,正如我最初想到的那样,非常简单的问题。我想在 Swift 中编码一个对象,它继承另一个 Class。
这里的类:
class NetworkMessage: Codable {
var version:Int?
}
class AddPlayerRequest: NetworkMessage {
var playerName: String?
var playerHashedPw: String?
private enum CodingKeys: String, CodingKey {
case playerName
case playerHashedPw
}
override func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(playerName, forKey: .playerName)
try container.encode(playerHashedPw, forKey: .playerHashedPw)
try super.encode(to: encoder)
}
}
我知道有数以百万计的示例,我会说我确信我做了示例中的所有操作,但似乎我错过了一些东西,因为当我尝试AddPlayerRequest
像这样编码时:
let apr = AddPlayerRequest()
apr.playerName = "Test"
apr.playerHashedPw = "hynt87t7t76yt=="
apr.version = 1
do {
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(apr)
let jsonStr = String(data: data, encoding: .utf8)
} catch {
print(error)
}
输出是:
{
}
编辑:似乎相同的代码正在另一个 MAC 上运行。任何人都知道为什么代码可能在一个 MAC 上运行,但不能在另一个 MAC 上运行?
解决方案
推荐阅读
- javascript - 在视图中如何将 javascript 中的数据发送到控制器
- c - 解析 pcap 数据包
- c# - 如何连接到 LibreOfficeBase 数据库?
- intellij-idea - vim 块突出显示在 intellij 中无法正常工作
- jquery - Kendo AutoComplete 以编程方式设置选定对象
- javascript - 使用 map 函数从包含数组的 Object 中创建一个数组
- testing - 在 groovy (Spock) 中测试文件结构
- javascript - 通过JS删除Required修饰符后触发的OnInvalid html事件
- reactjs - Material UI (React):如何设置包装 Select 的 Input 样式?
- netty - 使用 netty 的 SslHandler::close(ChannelHandlerContext, ChannelPromise)