0

在我的项目上工作。我必须进行数据序列化。

我有一个代码,但我不知道如何对其应用序列化。

public class allmethods
{
    private static string Name;
    private static int ID;
    private static int Age;
    private static string Email;
    private static string output;

                public static void WritingMethod()  
          {
                int count = 0;
                while (count < 10)
             {
                    Console.Write(" Enter your Name: ");
                    Name = Console.ReadLine();

                    Console.Write(" Enter your ID: ");
                    ID = int.Parse(Console.ReadLine());

                    Console.Write(" Enter your Age: ");
                    Age = int.Parse(Console.ReadLine());

                    Console.Write(" Enter your E-mail: ");
                    Email = Console.ReadLine();



                    StreamWriter Sw = new StreamWriter("fileone.txt", true);
                    string output = string.Format("Thank you for registration! Your Submitted information are:" + Environment.NewLine + "Name: {0}"
                    + Environment.NewLine + "ID: {1}" + Environment.NewLine + "Age: {2}" + Environment.NewLine + "E-mail: {3}", Name, ID, Age, Email);
                    Console.WriteLine(output);      
                    Sw.WriteLine(output + Environment.NewLine);
                    Console.ReadLine();

                    Sw.Close();
                    count++;
             }
         }
     }

如果有人帮助我,我会很高兴。谢谢你。

4

3 回答 3

1

序列化和反序列化是一个非常大的话题,不适合一个问题。

但是,既然你问从哪里开始,我建议你研究一下ISerializable界面。

http://msdn.microsoft.com/en-CA/library/system.runtime.serialization.iserializable.aspx

祝你好运。

于 2013-04-26T06:06:38.953 回答
1

您需要做的第一件事是摆脱那些静态字段;大多数序列化程序都在对象上工作......所以让我们创建一个class

public class Person
{
    public string Name { get; set; }
    public int ID { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

所以我们的主要逻辑变成:

var person = new Person();
Console.Write(" Enter your Name: ");
person.Name = Console.ReadLine();

Console.Write(" Enter your ID: ");
person.ID = int.Parse(Console.ReadLine());

Console.Write(" Enter your Age: ");
person.Age = int.Parse(Console.ReadLine());

Console.Write(" Enter your E-mail: ");
person.Email = Console.ReadLine();

接下来我们需要问——“我们想要什么序列化格式?”。看起来你正在追加。通常我会说“从简单的东西XmlSerializer或 JSON 开始”,但这些都不是可附加的。BinaryFormatterIMO 普遍是一个糟糕的选择(很少有例外)。我有点偏见,但是一个简单易用的可附加序列化格式的例子是协议缓冲区,所以我会使用它 - 请注意,这是一种二进制格式,但易于使用。我们需要做的第一件事是添加(可能通过 Visual Studio 中的 nuget 包管理器)protobuf-net。然后我们需要告诉它如何处理我们的类型,我们通过注解来完成:

[ProtoContract]
public class Person
{
    [ProtoMember(1)] public string Name { get; set; }
    [ProtoMember(2)] public int ID { get; set; }
    [ProtoMember(3)] public int Age { get; set; }
    [ProtoMember(4)] public string Email { get; set; }
}

现在我们将编写代码更改为使用序列化程序(以可附加的方式):

using (var file = File.Open("fileone.bin", FileMode.Append))
{
    Serializer.SerializeWithLengthPrefix(file, person,
        PrefixStyle.Base128, Serializer.ListItemTag);
}

然后为了证明我们可以在最后读回它们:

using (var file = File.OpenRead("fileone.bin"))
{
    foreach(var person in Serializer.DeserializeItems<Person>(
        file, PrefixStyle.Base128, Serializer.ListItemTag))
    {
        Console.WriteLine("{0}, {1}, {2}, {3}",
            person.ID, person.Name, person.Age, person.Email);
    }
}
于 2013-04-26T07:23:32.740 回答
1

看看本书 C# in a Nutshell 中的这些示例。阅读关于序列化的章节也会有所帮助。

于 2013-04-26T06:39:07.550 回答