简体   繁体   English

反序列化无法列出数据

[英]Deserialisation unable to list data

I am trying to create an application that can both serialise and deserialise data, i can serialise the information however when i try to read the information i am left with an empty list and i do not know why. 我正在尝试创建一个既可以序列化也可以反序列化数据的应用程序,但是我可以序列化信息,但是当我尝试读取信息时,却留下了一个空列表,我不知道为什么。

My Serialization class 我的序列化课程

  [Serializable()]
  public class FileSerilizeObject 
    {
        public static string FileName { get; set; }
        public static string Extension { get; set; }
        public static string Base64 { get; set; } 

        public FileSerilizeObject(string filename, string extension, string base64vaulue)
        {
            FileName = filename;
            Extension = extension;
            Base64 = base64vaulue;
        }

    }
}

My serialization/deserialization methods 我的序列化/反序列化方法

 public void Serialize(List<FileSerilizeObject> List)
        {
            using (Stream stream = File.Open(savepath, FileMode.OpenOrCreate))
            {
                BinaryFormatter bin = new BinaryFormatter();
                bin.Serialize(stream, List);
                stream.Close();
            }

        }

        public List<FileSerilizeObject> Deserialised(string OpenPath)
        {
            List<FileSerilizeObject> defo;
            using(Stream stream = File.Open(OpenPath, FileMode.Open))
            {

                BinaryFormatter bin = new BinaryFormatter();
                defo = (List<FileSerilizeObject>)bin.Deserialize(stream);
            }

            return defo;
        }

I have checked to insure that the file paths are correct and that the file itself is not empty.Everything is fine however the "defo" list is always empty so i can only assume the issue is with the defo = (List<FileSerilizeObject>)bin.Deserialize(stream); 我已经检查过以确保文件路径正确并且文件本身不为空。一切都很好,但是“ defo”列表始终为空,因此我只能假设问题出在defo = (List<FileSerilizeObject>)bin.Deserialize(stream); Line however i do not know why. 行,但我不知道为什么。

Try to set the [Serializable()] attribute for each property. 尝试为每个属性设置[Serializable()]属性。

So it would look like this: 所以它看起来像这样:

[Serializable()]
public class FileSerilizeObject 
    {
        [Serializable()]
        public string FileName { get; set; }
        [Serializable()]
        public string Extension { get; set; }
        [Serializable()]
        public string Base64 { get; set; } 

        public FileSerilizeObject(string filename, string extension, string base64vaulue)
        {
            FileName = filename;
            Extension = extension;
            Base64 = base64vaulue;
        }

    }
}

EDIT: Removed static keyword from properties. 编辑:从属性中删除了static关键字。

You need to remove the static from your properties 您需要从属性中删除静态

[Serializable]
public class FileSerializeObject 
{
    public string FileName { get; set; }
    public string Extension { get; set; }
    public string Base64 { get; set; } 

    public FileSerializeObject(string filename, string extension, string base64vaulue)
    {
        FileName = filename;
        Extension = extension;
        Base64 = base64vaulue;
    }

}

I tested your code into a console application and it is working for me, I tested with VS 2013 but I used the same code that you wrote above. 我将您的代码测试到控制台应用程序中,并且对我有用,我使用VS 2013进行了测试,但使用的代码与您上面编写的相同。

Some details: 1. I removed the word static form the "FileSerilizeObject" 一些细节:1.我从“ FileSerilizeObject”中删除了“ static”一词。

The class FileSerilizeObject 类FileSerilizeObject

 [Serializable()]
public class FileSerilizeObject
{
    public string FileName { get; set; }
    public string Extension { get; set; }
    public string Base64 { get; set; }

    public FileSerilizeObject(string filename, string extension, string base64vaulue)
    {
        FileName = filename;
        Extension = extension;
        Base64 = base64vaulue;
    }

}

Functions 职能

public static void Serialize(List<FileSerilizeObject> List)
    {
        using (Stream stream = File.Open(@"C:\Users\ttest\Desktop\folder1\data.bin", FileMode.OpenOrCreate))
        {
            BinaryFormatter bin = new BinaryFormatter();
            bin.Serialize(stream, List);
            stream.Close();
        }

    }

    public static List<FileSerilizeObject> Deserialised(string OpenPath)
    {
        List<FileSerilizeObject> defo;
        using (Stream stream = File.Open(OpenPath, FileMode.Open))
        {

            BinaryFormatter bin = new BinaryFormatter();
            defo = (List<FileSerilizeObject>)bin.Deserialize(stream);
        }

        return defo;
    }

Main 主要

var bytes = Encoding.UTF8.GetBytes("dffesdbcdef==");
        var base64 = Convert.ToBase64String(bytes);
        FileSerilizeObject f1 = new FileSerilizeObject("test", "jpg", base64);
        bytes = Encoding.UTF8.GetBytes("ggasddbcdef==");
        base64 = Convert.ToBase64String(bytes);
        FileSerilizeObject f2 = new FileSerilizeObject("test2", "png", base64);
        bytes = Encoding.UTF8.GetBytes("asddffasdasdasdesdbcdef==");
        base64 = Convert.ToBase64String(bytes);
        FileSerilizeObject f3 = new FileSerilizeObject("test3", "doc", base64);


        List<FileSerilizeObject> lFiles = new List<FileSerilizeObject>();
        lFiles.Add(f1);
        lFiles.Add(f2);
        lFiles.Add(f3);


        Serialize(lFiles);
        Deserialised(@"C:\Users\rjimen4x\Desktop\tutoriales\data.bin");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM