我可以在用于SQLite的类中使用String列表吗?

SQLite-net将用于表示表的类中使用的数据类型有哪些限制? 具体来说,我可以使用这个:

public List CoconutWaterBrands { get; set; } 

……或者我需要这个:

 public string[] CoconutWaterBrands { get; set; } 

……还是别的什么?

ORM(又名抽象泄漏)会产生这种问题。 类中的字段将对应于表中的列。 如果你使用List或数组,那么ORM必须以某种方式将列表中的那些值组合在一个列中,因为它必须选择某种分隔符,如果分隔符出现在你的字符串值中,最终你会在兔子洞里慢慢找到你的自我。

我不认为SQLite-net支持数组/列表。 您将需要使用字符串(并根据需要拆分并加入它)或创建一个新表来表示一对多关系。

与Sandy的答案类似,在序列化/反序列化列表方面,您可以使用SQLite-Net Extensions库中的 Text blobbed properties 。 例如,在您的Model类中:

 public class SomethingToDoWithCoconuts { [TextBlob(nameof(CoconutWaterBrandsBlobbed))] public List CoconutWaterBrands { get; set; } public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands } 

从文本blobbed属性的文档 :

文本 – blobbed属性在加载时被序列化为文本属性,并在加载时反序列化。 这允许在单个列中将简单对象存储在同一个表中。

文本blobbed属性具有序列化和反序列化对象的一小部分开销和一些限制,但是存储简单对象(如List或Dictionary of basic types或简单关系)的最佳方法。 Text-blobbed属性需要一个声明的字符串属性,其中存储了序列化对象。

文本blobbed属性不能与其他对象建立关系,也不能与其父对象建立反向关系。

如果未使用TextBlobOperations.SetTextSerializer方法指定其他序列化程序,则使用基于JSON的序列化程序。 要使用JSON序列化程序,必须在项目中包含对Newtonsoft Json.Net库的引用,也可以作为NuGet包提供。

要为问题提供更具体的解决方案,可以使用Newtonsoft.Json序列化为JSON blob:

 private string coconutWaterBrands; [Ignore] public List CoconutWaterBrands { get { return JsonConvert.DeserializeObject>(coconutWaterBrands); } set { coconutWaterBrands = JsonConvert.SerializeObject(value); } }