Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在sqlite网络扩展中使用Textblobbed_C#_Json_Sqlite_Sqlite Net Extensions - Fatal编程技术网

C# 在sqlite网络扩展中使用Textblobbed

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

我试图在sqlite中映射一个复杂的类,但似乎有点不对劲,因为当我检索我的对象时,复杂的字段是空的。 简言之,我的班级是类似的:

 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>();