Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我不能再反序列化这些数据?_C#_.net_Json_Winforms_Serialization - Fatal编程技术网

C# 为什么我不能再反序列化这些数据?

C# 为什么我不能再反序列化这些数据?,c#,.net,json,winforms,serialization,C#,.net,Json,Winforms,Serialization,我正在使用以下代码序列化一些数据并将其保存到文件: MemoryStream stream = new MemoryStream(); DataContractJsonSerializer serializer = new DataContractJsonSerializer((typeof(Item))); Item item = ((Item)list.SelectedItems[0].Tag); serializer.Wri

我正在使用以下代码序列化一些数据并将其保存到文件:

        MemoryStream stream = new MemoryStream();
        DataContractJsonSerializer serializer = new DataContractJsonSerializer((typeof(Item)));

        Item item = ((Item)list.SelectedItems[0].Tag);
        serializer.WriteObject(stream, item);

        var filepath = Program.appDataPath + list.SelectedItems[0].Group.Name + ".group";

        stream.Position = 0;

        using (FileStream fileStream = new FileStream(filepath, FileMode.Create))
        {
            stream.WriteTo(fileStream);
        }
稍后,我将尝试从文件中读回该数据并将其插入ListView:

    private void OpenFiles()
    {
        // DEBUG ONLY:
        // Read into memorystream and filestream.
        Console.WriteLine("Attempeting to open note.");

        bool canLoad = false;
        foreach (string file in Directory.GetFiles(Program.appDataPath))
        {
            if (file.EndsWith(".group"))
            {
                MemoryStream stream = new MemoryStream();
                DataContractJsonSerializer serializer =
                    new DataContractJsonSerializer(
                        typeof(
                        List<Item>
                        )
                        );
                using (FileStream fileStream =
                    new FileStream(
                        file,
                        FileMode.Open)
                        )
                {
                    fileStream.CopyTo(stream);
                }

                stream.Position = 0;
                //List<Withdrawal> tempWithList = new List<Withdrawal>();
                foreach (Item item in (List<Item>)serializer.ReadObject(stream))
                {
                    Console.WriteLine(item.Title + " " + item.Group.Name);
                    Item.Items.Add(item);
                }

                //Console.WriteLine("Got file \{file}");

                //if (file.EndsWith(".group"))
                //{
                //    Console.WriteLine("File is a group.");

                //    MemoryStream stream = new MemoryStream();
                //    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Item>));

                //    using (FileStream fileStream = new FileStream(file, FileMode.Open))
                //    {
                //        fileStream.CopyTo(stream);
                //    }

                //    Console.WriteLine("Got stream");

                //    stream.Position = 0;

                //    try
                //    {
                //        Item.Items = (List<Item>)serializer.ReadObject(stream);
                //        Console.WriteLine("WTF?");
                //    }
                //    catch(Exception exception)
                //    {
                //        Console.WriteLine(exception.Message);
                //    }

                //    Console.WriteLine(Item.Items.Count);

                //    canLoad = true;
                //}
                //else Console.WriteLine("File is not a group.");
            }

            if (canLoad)
            {
                //list.Items.Clear();


                foreach (Item item in Item.Items)
                {
                    ListViewGroup group = new ListViewGroup(item.Group.Name);
                    list.Groups.Add(group);
                    list.Items.Add(
                        new ListViewItem(
                            item.Title,
                            group)
                            );

                    Console.WriteLine(item.Title + " " + item.Group.Name);
                }
            }
        }
    }
项目1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

namespace Notes
{
    [DataContract]
    [Serializable]
    public class Item : Note
    {
        [DataMember]
        public static List<Item> Items = new List<Item>();

        [DataContract]
        public enum ItemType
        {
            Group,
            Note
        }

        [DataMember]
        public ItemType Type { get; set; }

        [DataMember]
        public int Index { get; set; }
    }
}
如何对这些对象进行反序列化/从文件中读取,并将它们放入列表或列表视图中?我已经这样做了,但由于某种原因,它不再起作用了


任何帮助都将不胜感激。

当您创建
.group
文件时,您将序列化单个

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Item));

    // And later
    serializer.WriteObject(stream, item);
但是,当您反序列化
.group
文件的内容时,您会尝试反序列化
列表


我认为班级结构已经改变了。序列化和反序列化是不同的。@Khan我不太明白。你是说我的类结构改变了还是我们反序列化数据的方式改变了?我不知道。任何一种变化都可能导致问题。您的类结构可能已更改。您的序列化程序是针对类型
DataContractJsonSerializer((typeof(Item)))
的,但您的反序列化程序是针对类型
new DataContractJsonSerializer(typeof(List))
。那些不匹配。一个是
typeof(Item)
,另一个是
typeof(List)
。看起来每个
。组
文件都有一个
,所以
DataContractJsonSerializer(typeof(Item))
可能是正确的。哦!非常感谢你。这很有效。和我以前的很不一样。直到刚才我才意识到有一个改变,那就是Item类中的`:Note`。我猜这就是为什么相同的反序列化代码不再工作的原因。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

namespace Notes
{
    [DataContract]
    public class Note
    {
        [DataMember]
        public string Title { get; set; }

    [DataMember]
    public string Content { get; set; }

    [DataMember]
    public Group Group;

    [DataContract]
    public enum NoteImportance
    {
        Important,
        Neutral,
        NotImportant
    }

    [DataMember]
    public NoteImportance Importance { get; set; }

    [DataMember]
    public bool Protected { get; set; }
}
}
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Item));

    // And later
    serializer.WriteObject(stream, item);
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Item>));

    // And later
    foreach (Item item in (List<Item>)serializer.ReadObject(stream))
    {
        Item.Items.Add(item);
    }
    var serializer = new DataContractJsonSerializer(typeof(Item));

    // And later
    var item = (Item)serializer.ReadObject(stream);
    if (item != null)
        Item.Items.Add(item);