日期:2011-03-02  浏览次数:20507 次

如何在.NET中处理WMI数据
--------------------------------------------------------------------------------


学习当WMI属性与.NET数据类型不相符时,如何进行处理。
by Ken Getz
备注:在2月12日(周三)于San Francisco举办的VBITS大会上,Ken Getz发布了主题为“Fill the Gaps With WMI”和“Save Yourself With .NET Serialization”的演讲。本文的技巧就选自其中。

当WMI属性与.NET数据类型不相符时
当WMI(Windows Management Instrumentation)的设计者在创建他们的类时,并没有考虑到.NET程序员。你会发现,许多WMI属性与.NET数据类型都不直接相符。例如,虽然WMI支持无符号整数类型,但VB.NET并不支持。有时侯,你可以用.NET提供的结构进行仿造。在其它情况下,你需要关闭VB.NET中的Option Strict来处理WMI数据。如果你发现你的代码在Option Strict被打开的情况下不能运行,你可以将“故障”代码隔离起来,单独放在一个模块中,在该模块的顶部,将Option Strict设置为Off。

在串行化一个对象时排除一个类成员
在串行化一个对象时,serializer将所有与你的对象相关的值(即使是私有的值)都保存在输出流中。因为.NET的serializer的目的就是让你保存和恢复一个对象或一组对象的整个状态,因此serializer保存所有的数据(而不仅仅是公用数据(public data))是很至关重要的。如果你想在串行化对象时明确地排除任何类成员,那么就将NonSerializable属性添加到特定的成员上。(该技巧只适用于SoapFormatter和BinaryFormatter类——XmlFormatter类不保存专用数据(private data),因为它的目的是串行化可以用于XML Web Services的数据,其中专用数据是不起任何作用的。)