【发布时间】:2012-06-08 17:52:39
【问题描述】:
我有一个具有 bool 属性的简单类。此属性的“获取”逻辑执行存储过程以从数据库返回位字段。
然后我将这个类序列化并将其保存到数据库中的 XML 字段中。它保存了类和布尔属性就好了,没问题。
我似乎遇到的问题是当我反序列化这个类时。该类反序列化就好了,但是当驱动bool字段的数据已经更新时,该类似乎只识别XML中序列化的内容,并且它没有回溯数据库获取新的bool值(不执行我获取新更新位字段的过程)。
我的解决方案是向该字段添加 XmlIgnoreAttribute 属性,这样一开始就不会对其进行序列化。但我想知道是否有人注意到这一点和/或可以帮助我了解 .NET XmlSerializer 类的内部工作。
谢谢!
[XmlIgnoreAttribute]
public bool IsUpdated
{
get
{
DataTable dtResults = mclsSQLServerTool.LoadDataTable("exec stp_RL_SEL_NameIsUpdated '" + mstrName + "'");
bool blnIsUpdated = Convert.ToBoolean(dtResults.Rows[0]["RU_bitIsUpdated"]);
return blnIsUpdated;
}
}
【问题讨论】:
-
我有点困惑。我认为(尚未检查) XmlSerializer 会忽略仅获取的简单值(不是列表)。这是您的实际代码吗?您预计会发生什么?
-
我希望它执行 proc 并从数据库中获取最新值。而且我相信您对 XmlSerializer 和 get-only 值是正确的。上面的代码是我添加 XmlIgnoreAttribute 的最新代码;我曾经有一个简单的设置块{}
-
为什么要这样做?反序列化器对 getter 并不是很感兴趣(列表等除外)——即使它确实运行了(它不应该运行),因为它不会在任何地方存储任何东西...... 你怎么知道?我>
-
我不认为这是故意的,它只是这样做的方式。直到我们开始使用这个 DLL 并注意到这个属性的问题,所以我们打开代码并注意到这一点并修改了代码。当我们调试时,数据库总是返回一个结果,而不是反序列化对象返回的结果,尽管有 SQL 调用。所以我只是发布这个问题来尝试弄清楚 XmlSerializer 的内部工作原理。
标签: c# .net serialization xmlserializer