1

序文: これは長い質問です。なぜ私が質問しているのかを読んで理解したくない場合は、「コードを単純にテストしてみませんか?」というコメントを省いてください。

次のようなオブジェクト モデルがあります。

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 つのオブジェクト ( NestedObjectModel1NestedObjectModel2および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予測不可能になるため、使用可能になりますか? ?

4

1 に答える 1

4

これは機能します。順序は予測可能です。

ただし、そのようなことはお勧めしません。クリーンなアプローチは、型と JSON を受け取り、逆シリアル化を実行するコンストラクターを提供することです。
そのアプローチを使用すると、現在の一時的な結合を回避できます。

于 2013-02-12T14:54:47.937 に答える