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
}
私は明らかに PhoneNumber の別のクラスを持っています:
public class PhoneNumber
{
public string Number { set; get; }
public bool IsVerified { set; get; }
public string AttrString { set; get; }
}
ContactEmail クラスは WinPhone のネイティブ クラスです。
さて、DBにテーブルを作成した後:
connection.CreateTable<Contact.PhoneNumber>();
connection.CreateTable<Contact>();
連絡先のリストにデータを入力したら、DB に保存します。次のように1つずつ保存してみました:
connection.InsertWithChildren(contact,true);
すべてのリストをまとめて:
connection.InsertAllWithChildren(listOfContacts, true);
保存する前に、リストが正しく入力されていると確信しています。しかし、sqlite からその値を読み取ると、次のようになります。
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
PhoneNumbers フィールドと MailAddresses フィールドに値が表示されませんが、blob フィールドにはシリアル化された値が入力されています。
中毒で、ブロブ化されたフィールドを手動で逆シリアル化しようとすると、Json.net から例外が発生します (つまり、この方法で実行します)。
foreach (Contact pc in list)
{
try
{
Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
}
catch {
;
}
}
私は何が間違っていますか?ありがとうございました