次の行に沿って、データベースにキー値テーブルを作成したい
public class KeyValue {
public string Id { get; set; }
public dynamic Value {get; set; }
}
わずかに変更された SqlProvider を使用すると、をCreateTable<KeyValue>()
生成するのに問題はありません。varchar(1024) Id
varchar(max) Value
オブジェクトの保存に問題はありません。問題は、オブジェクトをロードするときです
var content = dbConn.GetById<KeyValue>("about");
content.Value
この時点で文字列です。
データベース レコードを見ると、値のテキストに型情報が格納されていないように見えます。
ServiceStack.Text
適切な型情報で手動で呼び出して逆シリアル化を呼び出す以外に、私ができることは本当にありますか?
絶対動的は必要ありません。実際の使用例は、動的ではなく基本クラスを使用したポリモーフィズムです。したがって、値が基本クラス、動的、オブジェクトなどの型であるかどうかはあまり気にしません。クラスを使用する以外は関係ありません
public class KeyValue {
public string Id { get; set; }
public MySpecificChildType Value {get; set; }
}
Value の文字列以外は取得できませんでした。オブジェクトを正しく逆シリアル化できるように型情報をシリアル化するように OrmLite に指示できますか?それとも手動で行う必要がありますか?
編集:さらに詳しい情報。OrmLite は によって定義された Jsv シリアライザーを使用しておりServiceStack.Text.TypeSerializer
、BSD バージョンではプラグ可能ではありません。KeyValue クラスに Type プロパティを動的な Value で追加すると、次のことができます。
var value = content.Value as string;
MySpecificChildType strongType =
TypeSerializer.DeserializeFromString(content, content.Type);
私は本当にこれを行うためのより良い方法を望んでいます.1つのタイプのオブジェクトがデータベースに入り、別のタイプ(文字列)で戻ってくるのは本当に好きではありません。