为了账号安全,请及时绑定邮箱和手机立即绑定

在数据库中存储包含列表<>的自定义对象

在数据库中存储包含列表<>的自定义对象

C#
弑天下 2021-08-22 17:57:58
我想将一个类/对象保存到 Android 中的本地 SQLite 数据库。但是这个对象包含一个列表。据我所知,无法将列表保存到数据库中,因此我想忽略它并在从数据库加载对象后填充它。我一直在查看有关 Android 数据库的多个教程,但没有一个涵盖如何处理无法存储在数据库中的属性。我还查看了 xamarin 文档并尝试使用 [ignore] 但没有成功。这是我想在 [ignore] 仍然存在的情况下保存到数据库的类:[Table("Room")]public class Room{    [PrimaryKey, AutoIncrement]    public int id { get; set; }    public string RoomName { get; set; }    public string NFC_UId { get; set; }    [Ignore]    public List<Switch> RoomSwitches = new List<Switch>();    public Room()    {    }}当我尝试使用 ignore 时出现的错误是:严重性代码描述项目文件行抑制状态错误 CS0592 属性“忽略”在此声明类型上无效。它仅对“属性,索引器”声明有效。那么是否可以忽略该列表,或者是否有其他解决方案可以解决我的问题?
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

如果您android architectures从那时开始使用 Room,您可以将TypeConverters类似于@Wheels73 在GSON. 例如,您可以将类型转换器编写为:


class ListTypeConverter {


    @TypeConverter fun fromStringToList(stringValue: String?) : List<String>? {

        val listType = object: TypeToken<List<String>>(){}.type

        return if(stringValue?.isNotEmpty == true) {

            Gson().fromJson(stringValue, listType)

        } else null

    }


    @TypeConverter fun fromListToString(listValue: List<String>?) : String? =

        Gson().toJson(listValue ?: return null)


}

并将这个 TypeConverter 添加到您的数据库定义中:


@TypeConverters(ListTypeConverter::class) // add additional using ,

class MyAppDatabase : RoomDatabase() {

    // retrieve your DAOs

}

如果您不使用ROOM. 想法是类似的,使用GSON对象并将其转换为或从String以创建列表并将其保存为字段。我认为它在 C# 中也能类似地工作。我不太熟悉,但也许你可以使用


var listString = JsonConvert.SerializeObject(listOfObjectType) 和


var listOfObject = JsonConvert.DeserializeObject<List<ObjectType>>(listString)


查看完整回答
反对 回复 2021-08-22
?
BIG阳

TA贡献1859条经验 获得超6个赞

结果我不得不像这样使用 [ignore]:


[Table("Room")]

public class Room

{

    [PrimaryKey, AutoIncrement]

    public int id { get; set; }


    public string RoomName { get; set; }


    public string NFC_UId { get; set; }


    [Ignore]

    public List<Switch> RoomSwitches { get; set; } //note the get and set instead of new list


    public Room()

    {


    }


    public getswitches(){} <---

}

我现在在房间类中使用一个函数(用<---标记)在房间从数据库加载后获取开关。


查看完整回答
反对 回复 2021-08-22
  • 2 回答
  • 0 关注
  • 289 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号