【问题标题】: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);
        }
    }

【问题讨论】:

    标签: c# object serialization binary deserialization


    【解决方案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);
            }               
        }
    }
    

    【讨论】:

    • 很高兴我能提供帮助,如果您认为此答案有帮助,您可以通过单击复选标记按钮将其标记为答案。
    • 遗憾的是它最终不起作用,我得到一个异常:在解析完成之前已经到达流的末尾。
    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多