序文: これは長い質問です。なぜ私が質問しているのかを読んで理解したくない場合は、「コードを単純にテストしてみませんか?」というコメントを省いてください。
次のようなオブジェクト モデルがあります。
public class MyObjectModel
{
public byte TypeOfNestedObject { get; set; }
public string NestedObjectInJson { get; set; }
public NestedObjectModel1 { get; set; }
public NestedObjectModel2 { get; set; }
public NestedObjectModel3 { get; set; }
public MyObjectModel()
{
NestedObjectModel1 = null;
NestedObjectModel2 = null;
NestedObjectModel3 = null;
}
public void DeserializeJsonString()
{
if (TypeOfNestedObject == 1) {
NestedObjectModel1 = "deserialize NestedObjectInJson
into NestedObjectModel1";
}
if (TypeOfNestedObject == 2) {
NestedObjectModel2 = "deserialize NestedObjectInJson
into NestedObjectModel2";
}
if (TypeOfNestedObject == 3) { NestedObjectModel3 ... }
}
}
基本的に、オブジェクトはネストされた 3 つのオブジェクト ( NestedObjectModel1
、NestedObjectModel2
およびNestedObjectModel3
) で構成されます。ただし、実際に使用されるのは常にそのうちの 1 つだけです。データベースには、このオブジェクトを再作成するために使用されるフィールドを保存します。データベース フィールドの 1 つは、特定のインスタンスの 3 つのネストされたオブジェクトの 1 つを含む json 文字列です。
私のクエリは次のようになります。
var TheObjectModel = from t in MyDC.Table
.....
select new MyObjectModel()
{
TypeOfNestedObject = t.TypeOfNestedObject,
NestedObjectInJson = t.NestedObjectInJson
};
プロパティを使用してTypeOfNestedObject
、特定のインスタンスが持つネストされたオブジェクトを確認しますMyObjectModel
。とりあえず、クエリが実行された後、TypeOfNestedObject
文字列NestedObjectInJson
を読み取って適切な型に逆シリアル化し、逆シリアル化されたオブジェクトを対応するネストされたオブジェクトとして追加するメソッドを実行します。
ここで、カスタム セッターを追加して、NestedObjectInJson
クエリの実行時にこのプロパティが設定されると、オブジェクトが文字列を適切な型に自動的に逆シリアル化するようにします。ただし、これが機能するには、オブジェクトにもプロパティTypeOfNestedObject
が適切に設定されている必要があります。私は次のようにセッターを書きたい:
public NestedObjectInJson
{
set {
if (this.TypeOfNestedObject == 1) {
NestedObjectModel1 = "deserialize NestedObjectInJson
into NestedObjectModel1 ";
}
}
}
このようにセッターを記述した場合、プロパティ TypeOfNestedObject は、セッターの実行時に使用可能である必要があります。お気づきかもしれませんが、クエリでは、ロードTypeOfNestedObject
する前にロードしていますNestedObjectInJson
。
したがって、問題は次のとおりです。呼び出しを削除しDeserializeJsonString
てこのカスタム セッターを作成することにした場合、プロパティ TypeOfNestedObject は、クエリで前に設定されてNestedObjectInJson
いるため、またはクエリが記述された順序でプロパティの可用性がTypeOfNestedObject
予測不可能になるため、使用可能になりますか? ?