c# - 在 sqlite-net-extensions 中使用 Textblobbed

标签 c# json sqlite sqlite-net-extensions

我正在尝试在 sqlite 中映射一个复杂的类,但似乎出了点问题,因为当我检索我的对象时,复杂的字段是空的。 很快,我的类(class)是类似的:

 public class Contact
 {
    [PrimaryKey, AutoIncrement]
    public int Id { set; get; }
    public string Name { set; get; }
    public string Status { set; get; }

    [TextBlob("PhoneNumbersBlobbed")]
    public List<PhoneNumber> PhoneNumbers { set; get; }
    public string PhoneNumbersBlobbed { get; set; } // serialized PhoneNumbers

    [TextBlob("MailAddressesBlobbed")]
    public List<ContactEmail> MailAddresses { set; get; }
    public string MailAddressesBlobbed { get; set; } // serialized MailAddresses
 }

我显然有一个单独的 PhoneNumber 类:

     public class PhoneNumber
     {          
        public string Number { set; get; }
        public bool IsVerified { set; get; }
        public string AttrString { set; get; }  
    }

而ContactEmail类是WinPhone的原生类。

好了,在数据库中创建表之后:

 connection.CreateTable<Contact.PhoneNumber>();
 connection.CreateTable<Contact>();

并填充了我的联系人列表,我将它们保存在数据库中。我尝试通过以下方式一一保存:

connection.InsertWithChildren(contact,true);

作为所有列表的一部分:

connection.InsertAllWithChildren(listOfContacts, true);

并且我确定在保存之前列表已正确填充。 但是当我从 sqlite 中读取它的值时:

var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);

我在 PhoneNumbers 和 MailAddresses 字段中看不到值,而它们的 Blob 字段中填充了序列化值。

我上瘾了,试图手动反序列化 Blob 字段,我从 Json.net 得到一个异常(即以这种方式做):

 foreach (Contact pc in list)
        {
            try
            {
                Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
            }
            catch {
                ;
            }
        }

我哪里错了? 谢谢

最佳答案

为了从数据库中检索关系,您必须使用 SQLite-Net Extensions 提供的任何 WithChildren 方法。

尝试更改这些行:

var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);

对此:

var list = connection.GetAllWithChildren<Contact>();

您也不需要 PhoneNumber 表,因为它们在文本属性中被序列化。所以你可以删除这一行:

connection.CreateTable<Contact.PhoneNumber>();

关于c# - 在 sqlite-net-extensions 中使用 Textblobbed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581955/

相关文章:

c# - 使用 Dapper.Contrib 插入和多映射

android - 加入具有相同主键但不同数据的两个表

c# - 位标志 - 我错过了什么?

c# - ASP.NET Core - 执行命令时未找到 key

c# - 可移植类库是否支持 XmlTextReader?

c# - 如何自动删除测试结果

php - 尝试使用 JSON 将 javascript 发送到 php 脚本进行打包

php - Echo 多维 json 和 php

Android JSON解析错误无法转换为JSONArray

python - 使用 Python sqlite3 在数据库中创建表的 SQL