【发布时间】:2021-03-17 23:52:06
【问题描述】:
使用 Kotlin:
我有一个变量名与我的 JSON 字段名不同的类。当我调用gson.fromJSON(string, Array<MyClass>::class.java 时,声明时不会发生初始化。
我从另一篇帖子中了解到declaration isn't called with constructor 只调用了唯一的构造函数。
那么,如何在不调用 gson.fromJSON 和调用我的类的情况下轻松地将我的 JSON 数据放入我的类中?
我不是一个非常高级的开发人员。我正在寻找尽可能简单且系统高效的代码。
我想做的是:
val gson = Gson()
val seriesFirebaseList = gson.fromJson(seriesJSONArrayString, Array<Series>::class.java).toList()
class Series(Series_Unique_ID: String,
Series_Record_Name: String,
Series_Name: String,
Series_From_Year: Int,
Series_To_Year: Int?,
Is_Active: Int,
Logo_Image_Name: String,
Sort_Order: Int) {
val uniqueId: String = Series_Unique_ID
val recordName: String = Series_Record_Name
val seriesName: String = Series_Name
val fromYear: Int = Series_From_Year
var toYear: Int? = Series_To_Year
var isActive: Boolean = Is_Active == 1
val logoImageName: String = Logo_Image_Name
val sortOrder: Int = Sort_Order
// generated data
var imageFirebaseURLString: String? = null
var isFavoriteSeries = false
}
但是,所有变量最终都是 null 或默认值,而不是 JSON 值。
我唯一可以开始工作但似乎效率很低的事情是调用 JSON firebase 类,然后将其转换为我的类
val gson = Gson()
// create seriesFirebase
val seriesFirebaseList = gson.fromJson(seriesJSONArrayString, Array<SeriesFirebase>::class.java).toList()
val seriesList = mutableListOf<Series>()
seriesFirebaseList.forEach { seriesFirebase ->
val series = Series(seriesFirebase)
seriesList.add(series)
}
// series models
class Series(seriesFirebase: SeriesFirebase) {
val uniqueId: String = seriesFirebase.Series_Unique_ID
val recordName: String = seriesFirebase.Series_Record_Name
val seriesName: String = seriesFirebase.Series_Name
val fromYear: Int = seriesFirebase.Series_From_Year
var toYear: Int? = seriesFirebase.Series_To_Year
var isActive: Boolean = seriesFirebase.Is_Active == 1
val logoImageName: String = seriesFirebase.Logo_Image_Name
val sortOrder: Int = seriesFirebase.Sort_Order
// generated data
var imageFirebaseURLString: String? = null
var isFavoriteSeries = false
}
// used to convert Gson/JSON
class SeriesFirebase(val Series_Unique_ID: String,
val Series_Record_Name: String,
val Series_Name: String,
val Series_From_Year: Int,
val Series_To_Year: Int?,
val Is_Active: Int,
val Logo_Image_Name: String,
val Sort_Order: Int) {
constructor() : this(
"",
"",
"",
0,
2150,
0,
"",
0
)
override fun toString(): String {
return ("series: uniqueId: " + Series_Unique_ID
+ "; recordName: " + Series_Name
+ "; name: " + Series_Name
+ "; fromYear: " + Series_From_Year
+ "; toYear: " + Series_To_Year
+ "; isActive: " + Is_Active
+ "; logoImageName: " + Logo_Image_Name
+ "; sortOrder: " + Sort_Order)
}
}
【问题讨论】:
标签: json kotlin gson declaration