我有很多型号。一个例子是
struct Person
{
let id = Int
let nameOfBoss = String
...
}
enum CodingKeys: String, CodingKey
{
case id
case nameOfBoss = "nam_of_boss"
...
}
我想制作XML。该Web服务读取类似(snake_case)的代码
...
<name_of_boss>Greg</name_of_boss>
...
如何使用encodingKeys rawValue(String)像上面那样制作XML?
(大多数Pod都没有取得成功-因此我现在避免使用它们。尽管设法使用SWXMLHash)
(我写了一些代码来创建对象镜像...但是不会使用rawValue。)
答案 0 :(得分:1)
要在序列化过程中使用CodingKey
,您可能想使用新的Codable
协议,但是Foundation不支持XML。
Shawn Moore编写了一个interesting library,它从Foundation中添加了XMLDecoder
和XMLEncoder
类中的缺失项。 (Codable
支持XML)this answer虽然没有自述文件,但可以帮助您使用它。
另一种解决方案是尝试XMLMapper。该库使用与ObjectMapper相同的思想,但用于XML。
例如,您可以序列化以下模型结构:
struct Person: XMLMappable {
var nodeName: String! = "Person"
var id: String?
var nameOfBoss: String?
init() {
}
init(map: XMLMap) {
}
mutating func mapping(map: XMLMap) {
id <- map["id"]
nameOfBoss <- map["nam_of_boss"]
}
}
对于以下XML:
<Person>
<id>1</id>
<nam_of_boss>Greg</nam_of_boss>
</Person>
使用toXMLString()
协议的XMLMappable
功能:
var person = Person()
person.nameOfBoss = "Greg"
person.id = "1"
let xmlString = person.toXMLString()
希望这会有所帮助。