У меня есть несколько классов Codeable, которые я хочу преобразовать в строки JSON.
class MyCodable: NSObject, Codable {
override init() {
}
func encode(to encoder: Encoder) throws {
}
}
class Category: MyCodable {
required init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self);
//... assign values and call super.init
}
override func encode(to encoder: Encoder) throws {
}
var categoyId: Int64;
var categoryName: String;
enum CodingKeys: String, CodingKey {
case categoryId
case categoryName
}
}
class Product: MyCodable {
required init(from decoder: Decoder) throws {
//..assign values and call super.init
}
override func encode(to encoder: Encoder) throws {
}
var productId: Int64;
var categoryId: Int64;
var productName: String;
enum CodingKeys: String, CodingKey {
case productId
case categoryId
case productName
}
}
У меня есть служебный класс, который я использую для преобразования.
class JSONUtil: NSObject {
public static func encode(objects: [MyCodable]) -> String {
var json: String = "";
do {
let encoder = JSONEncoder();
encoder.outputFormatting = .prettyPrinted;
let jsonData = try encoder.encode(objects);
json = String(data: jsonData, encoding: String.Encoding.utf8)!
} catch let convertError { json = "[{error: '" + convertError.localizedDescription + "'}]"; }
return json;
}
public static func toJson(object: MyCodable) -> String {
var objects = [MyCodable]();
objects.append(object);
return encode(objects: objects);
}
}
Возвращаемое значение всегда "[{}]" независимо от того, что находится внутри массива объектов MyCodable. Во время отладки я вижу, что значения объекта Category заполнены.
Поскольку MyCodable не имеет свойств, поэтому JSONEncoder не распечатывает свойства категории? .. Или почему он не печатает свойства категории?
У меня такая же проблема с объектом Product.
Цель состоит в том, чтобы избежать необходимости настраивать преобразование JSON для каждого класса, который я хочу напечатать в JSON.