反序列化时如何正确测试数据类型
Posted
技术标签:
【中文标题】反序列化时如何正确测试数据类型【英文标题】:How to properly test for datatype when deserializing 【发布时间】:2021-08-16 21:53:00 【问题描述】:我试图将一些 Animal 类型的对象反序列化到一个列表中。但是我似乎无法弄清楚如何检查反序列化的对象实际上是动物。代码示例就是我所拥有的。但是,在将对象添加到动物类型列表之前,我将其投射到动物身上。所以我错过了两者之间的步骤。
提前致谢。
public void Load(String fileName)
if(fileName == null)
throw new ArgumentNullException("fileName");
String path = @"C:" + fileName;
if (fileName.Contains(@"\"))
path = fileName;
using (FileStream fileStream = File.OpenRead(path))
BinaryFormatter format = new BinaryFormatter();
Animals = (List<Animal>)format.Deserialize(fileStream);
【问题讨论】:
【参考方案1】:您可以使用GetType()
和typeof(T)
来检查类型:
public void Load(String fileName)
if (fileName == null)
throw new ArgumentNullException("fileName");
String path = @"C:" + fileName;
if (fileName.Contains(@"\"))
path = fileName;
using (FileStream fileStream = File.OpenRead(path))
BinaryFormatter format = new BinaryFormatter();
object obj = format.Deserialize(fileStream);
if (obj.GetType() == typeof(List<Animal>))
List<Animal> Animals = (List<Animal>)format.Deserialize(fileStream);
【讨论】:
很高兴我能提供帮助,如果您认为此答案有帮助,您可以通过单击复选标记按钮将其标记为答案。 遗憾的是它最终不起作用,我得到一个异常:在解析完成之前已经到达流的末尾。以上是关于反序列化时如何正确测试数据类型的主要内容,如果未能解决你的问题,请参考以下文章