反序列化需要铸造?

Joa*_*nge 1 .net c# xml serialization

我正在阅读这篇文章,他们有这个代码:

// Serialization
XmlSerializer s = new XmlSerializer( typeof( ShoppingList ) );
TextWriter w = new StreamWriter( @"c:\list.xml" );
s.Serialize( w, myList );
w.Close();

// Deserialization
ShoppingList newList;
TextReader r = new StreamReader( "list.xml" );
newList = (ShoppingList)s.Deserialize( r );
Run Code Online (Sandbox Code Playgroud)

最后一行是演员陈述吗?如果是这样,它是否会降低序列化性能?

Jar*_*Par 6

是的,最后一行是演员陈述.铸造确实具有与之相关的成本,但与序列化的成本相比,它是无关紧要的.我怀疑它甚至会出现在探查器上.

想想序列化涉及什么.

  • 处理字节流
  • 基于元数据信息创建类型
  • 字节数组和数据类型之间的转换

任何这些操作都比单个操作操作贵得多.

编辑至于它为什么需要铸造.

这里有几个原因.第一个是反序列化API在检查之前无法知道字节流的类型.因此,API在元数据中的返回类型方面唯一的选择是Object.

其次,反序列化必须支持任何可序列化的类型.为了起作用,它必须选择适用于所有可序列化类型的方法的返回类型.唯一可用的类型是对象.

  • @Joan它需要强制转换,因为反序列化引擎在读取基础数据之前不知道类型.此外,API一直存在于泛型之前,因此它被迫返回对象作为类型. (2认同)