前言:这是一个很长的问题,如果您不想阅读和理解我为什么要问这个问题,那么请不要评论“为什么不简单地测试代码?”
我有一个看起来像这样的对象模型:
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 ... }
}
}
基本上,该对象由三个嵌套对象(NestedObjectModel1
和NestedObjectModel2
)NestedObjectModel3
组成。但是,在任何给定时间实际上只使用其中一个。在数据库中,我存储用于重新创建此对象的字段,其中一个数据库字段是一个 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
不可预测?