反序列化时如何正确测试数据类型

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);
                       
    

【讨论】:

很高兴我能提供帮助,如果您认为此答案有帮助,您可以通过单击复选标记按钮将其标记为答案。 遗憾的是它最终不起作用,我得到一个异常:在解析完成之前已经到达流的末尾。

以上是关于反序列化时如何正确测试数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何让 ServiceStack 序列化/反序列化具有正确类型的 expando 对象

如何将 XML Choice 反序列化为正确的复杂类型

在序列化/反序列化时识别 dataFile 的类型

如何在数字反序列化中更改默认类型

Python之序列化和反序列化

如何将XML Choice反序列化为正确的复杂类型