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 ... }
     }
}

基本上,该对象由三个嵌套对象(NestedObjectModel1NestedObjectModel2NestedObjectModel3组成。但是,在任何给定时间实际上只使用其中一个。在数据库中,我存储用于重新创建此对象的字段,其中一个数据库字段是一个 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 ";
       }
   }
}

如果我这样编写 setter,则属性 TypeOfNestedObject 是否需要在 setter 运行时可用。如果您注意到,在查询中,我在加载TypeOfNestedObject之前加载NestedObjectInJson

所以问题是这样的:如果我决定删除对的调用DeserializeJsonString并创建这个自定义设置器,属性 TypeOfNestedObject 是否可用,因为在查询中它是在查询之前设置的,NestedObjectInJson或者是查询的写入顺序使属性的可用性TypeOfNestedObject不可预测?

4

1 回答 1

4

这会起作用,顺序是可预测的。

但是,我建议不要这样做。干净的方法是提供一个构造函数,它接受类型和 JSON 并执行反序列化。
使用这种方法,您可以避免当前的时间耦合

于 2013-02-12T14:54:47.937 回答