我想反序列化一个JSON字符串,该字符串不一定包含每个成员的数据,例如:
public class MyStructure
{
public string Field1;
public string Field2;
}
Run Code Online (Sandbox Code Playgroud)
假设我有一个实例:
Field1: "data1"
Field2: "data2"
Run Code Online (Sandbox Code Playgroud)
我反序列化一个字符串:
{ "Field1": "newdata1" }
结果应该是
Field1: "newdata1"
Field2: "data2"
Run Code Online (Sandbox Code Playgroud)
框架JavascriptSerializer和JSON.NET都在它们的反序列化方法中返回新对象,因此我可以想到直接执行此操作的唯一方法是将反序列化对象与使用反射的现有对象进行比较,这似乎是很多不必要的开销.理想情况下,某些软件会有一个方法,我传递一个现有的对象实例,只有那些存在于字符串中的成员才会得到更新.这里的要点是,我希望能够仅将已更改的数据传递给服务器,并更新现有对象.
是否可以使用这些工具中的任何一个,如果没有,有关如何解决问题的任何建议?
我有以下用户表对象和实体类:
object UserTable : IntIdTable() {
val name = varchar("name", 256)
}
class User(id: EntityID<Int>): IntEntity(id) {
companion object : IntEntityClass<User>(UserTable)
val name by UserTable.name
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 Gson(或其他一些库)将 JSON 解析为一个User实例,然后插入它?据我所知,似乎我必须创建一个中间UserData数据类,然后手动复制字段。
data class UserData {
var id: Int?
var name: String?
}
fun main() {
val data = Gson().fromJson<UserData>("...", UserData::class.java)
val user = User.new {
name = data.name
}
}
Run Code Online (Sandbox Code Playgroud)
在这个人为的例子中并不是那么糟糕,但我想知道是否有更干燥的方法。