我想将类/对象保存到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()
{
}
}
当我尝试使用忽略时收到的错误是:
严重性代码描述项目文件行抑制状态 错误CS0592在此声明类型上,属性“忽略”无效。它仅对“属性,索引器”声明有效。
那么有可能忽略该列表,或者有其他解决方案来解决我的问题吗?
答案 0 :(得分:0)
如果您正在使用android architectures
中的Room,则可以在TypeConverters
的帮助下将GSON
添加到数据库中,类似于@ Wheels73建议的内容。例如,您可以将类型转换器编写为:
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)
答案 1 :(得分:0)
原来我不得不像这样使用[ignore]:
public ActionResult SendFamilyMembers(AddFamilyMembersViewModel model)
{
logger.Trace(model.FamilyMembers[0].Name);//<----- Null reference
}
我现在正在使用会议室类中的一个函数(标记为<---)从数据库加载会议室之后获取开关。