小编ves*_*esz的帖子

数组的反序列化总是给出一个空数组

我有一个带有子类的自定义抽象基类,我已经使用ISerializable进行了可序列化/可序列化.当我对这个类的子类的单个实例进行序列化/反序列化时,一切正常.但是,当我做一个数组时,我总是在反序列化时得到一个空数组.使用BinaryFormatter完成序列化.

这些项目包含在:

public ObservableCollection<Trade> Trades { get; private set; }
Run Code Online (Sandbox Code Playgroud)

在序列化时,这是在SerializationInfo参数的GetObjectData中完成的:

Trade[] trades = (Trade[])Trades.ToArray<Trade>();
            info.AddValue("trades", trades);
Run Code Online (Sandbox Code Playgroud)

在反序列化时,这也是在SerializationInfo参数的序列化构造函数中完成的:

Trade[] trades = (Trade[])info.GetValue("trades", typeof(Trade[]));

            foreach (Trade t in trades)
            {
                Trades.Add(t);
            }
Run Code Online (Sandbox Code Playgroud)

反序列化总是给我一个空数组,正如我前面提到的,单个项目序列化和deseriaizes与这段代码很好:

序列化(GetObjectData方法):

info.AddValue("trade", Trades.First<Trade>());
Run Code Online (Sandbox Code Playgroud)

反序列化(序列化构造函数):

Trade t = (Trade)info.GetValue("trade", typeof(Trade));
            Trades.Add(t);
Run Code Online (Sandbox Code Playgroud)

这是个常见的问题吗?我似乎发现至少没有其他任何人参与其中.希望有一个解决方案:)如果我需要为您提供更多信息/代码,请告诉我.

谢谢!

c# arrays iserializable deserialization

9
推荐指数
1
解决办法
4616
查看次数

C#自定义序列化/反序列化与DeflateStreams一起使用

我正在尝试对对象进行自定义序列化/反序列化,以及使用DeflateStreams压缩/解压缩序列化数据.我最初为更复杂的对象做了这个,但是把它剪下来试图找出问题,然而它变得更加令人费解,因为它仍然存在.这是要序列化/反序列化的类:

[Serializable]
    public class RandomObject : ISerializable
    {
        public String Name { get; set; }
        public String SavePath { get; set; }

        public RandomObject()
        {
        }

        public RandomObject(String name, String savepath)
        {
            Name = name;
            SavePath = savepath;
        }

        public RandomObject(SerializationInfo info, StreamingContext context)
            : this(info.GetString("name"), info.GetString("savepath"))
        {
        }
        [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("name", Name);
            info.AddValue("savepath", SavePath);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里是应该序列化它的代码(似乎工作):

BinaryFormatter bf = new BinaryFormatter();
            using (MemoryStream ms = new MemoryStream())
            {
                bf.Serialize(ms, …
Run Code Online (Sandbox Code Playgroud)

c# serialization deflatestream deserialization

5
推荐指数
1
解决办法
7754
查看次数

序列化包含其他ISerializable对象的ISerializable对象

我正在努力保存更大的对象结构,其中包含我正在处理的应用程序中"项目"所需的所有数据.数据是诸如图片,流文档以及更基本的数据类型之类的东西.

现在,我目前的方法是在我需要保存的对象中包含的所有类上实现ISerializable.但是,当:

public class Profile : ISerializable
{
    public ObservableCollection<Trade> Trades { get; set; }

    public Profile() {}

    public Profile(SerializationInfo info, StreamingContext context)
            : this()
        {    
            foreach (SerializationEntry entry in info)
            {
                if (entry.Name.StartsWith("trade"))
                {
                    Type t = entry.ObjectType;
                    Trades.Add(entry.Value as Trade);
                }
            }
        }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            int i = 0;
            foreach (Trade t in Trades)
            {
                info.AddValue("trade" + i, t, t.GetType());
                i++;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

它造成了一个问题.填充我的List的Trade-class也实现了ISerializable.所以我很想知道:这是一个好方法吗?它甚至有用吗?我到目前为止编写的代码不起作用,我仍在尝试解决这些问题.

更具体地说,将是info.AddValue("trade"+ i,t,t.GetType()); 使用贸易级的ISerializable方法?或许这个界面甚至不打算处理这些类型的类.

因此,如果有人会如此善良,并采取一些看法,并指出我在这些事情的序列化方面的正确方向.

谢谢!

c# serialization

5
推荐指数
1
解决办法
2437
查看次数

WPF BitmapImage序列化/反序列化

我一直在尝试序列化和反序列化BitmapImages.我一直在使用我认为在这个线程中找到的方法:我的byte []错误到WPF BitmapImage转换?

只是为了迭代正在发生的事情,这是我的序列化代码的一部分:

using (MemoryStream ms = new MemoryStream())
                {
                    // This is a BitmapImage fetched from a dictionary.
                    BitmapImage image = kvp.Value; 

                    PngBitmapEncoder encoder = new PngBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(image));
                    encoder.Save(ms);

                    byte[] buffer = ms.GetBuffer();

                    // Here I'm adding the byte[] array to SerializationInfo
                    info.AddValue((int)kvp.Key + "", buffer);
                }
Run Code Online (Sandbox Code Playgroud)

这是反序列化代码:

// While iterating over SerializationInfo in the deserialization
// constructor I pull the byte[] array out of an 
// SerializationEntry
using (MemoryStream ms = new MemoryStream(entry.Value as byte[]))
                    { …
Run Code Online (Sandbox Code Playgroud)

wpf serialization bitmapimage deserialization

3
推荐指数
1
解决办法
6283
查看次数