C# 在sqlite网络扩展中使用Textblobbed
我试图在sqlite中映射一个复杂的类,但似乎有点不对劲,因为当我检索我的对象时,复杂的字段是空的。 简言之,我的班级是类似的:C# 在sqlite网络扩展中使用Textblobbed,c#,json,sqlite,sqlite-net-extensions,C#,Json,Sqlite,Sqlite Net Extensions,我试图在sqlite中映射一个复杂的类,但似乎有点不对劲,因为当我检索我的对象时,复杂的字段是空的。 简言之,我的班级是类似的: public class Contact { [PrimaryKey, AutoIncrement] public int Id { set; get; } public string Name { set; get; } public string Status { set; get; } [TextBlob("Phon
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
}
而ContactEmail类是WinPhone的本机类
那么,在DB中创建表之后:
connection.CreateTable<Contact.PhoneNumber>();
connection.CreateTable<Contact>();
由于所有列表都在一起:
connection.InsertAllWithChildren(listOfContacts, true);
我确信列表在保存之前已正确填充。
但当我从sqlite读取其值时:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
var list=connection.Table().ToList();
connection.UpdateAll(list,true);
我无法在我的PhoneNumber和MailAddresses字段中看到值,而它们的blobbed字段中填充了序列化值
在addiction中,尝试手动反序列化blobbed字段时,我从Json.net中得到一个异常(即,以这种方式执行):
foreach(联系列表中的pc)
{
尝试
{
Contact.PhoneNumber[]numbs=JsonConvert.DeserializeObject(pc.PhoneNumbersBlobbed);
}
抓住{
;
}
}
我怎么了?
谢谢为了从数据库中检索关系,您必须使用SQLite Net Extensions提供的任何
with children
方法
尝试更改以下行:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
谢谢,我刚刚尝试用GetAllWithChildren方法读取值,它通过Json反序列化程序抛出异常。异常消息是
将值“+393487373383”转换为键入Windows.ApplicationModel.Contacts.Contact时出错
听起来像是您在PhoneNumbersBlobbed
属性中保存了电话号码(+393487373383”),然后尝试将其反序列化为JSON。你不应该直接使用PhoneNumbersBlobbed
属性。不,我没有直接使用blobbed字段,我只是根据需要声明了由blobbed字符串字段解码的复杂对象,并将所有列表保存为在第一篇文章中写入的内容。
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
foreach (Contact pc in list)
{
try
{
Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
}
catch {
;
}
}
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
var list = connection.GetAllWithChildren<Contact>();
connection.CreateTable<Contact.PhoneNumber>();