如何在C#中进行数据序列化?

如何在C#中进行数据序列化?,c#,serialization,console-application,C#,Serialization,Console Application,在做我的项目。我必须做数据序列化 我有一个代码,但我不知道如何对其应用序列化 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

在做我的项目。我必须做数据序列化

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

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++;
             }
         }
     }
公共类所有方法
{
私有静态字符串名;
私有静态int-ID;
私人静态信息;
私有静态字符串电子邮件;
私有静态字符串输出;
公共静态void WritingMethod()
{
整数计数=0;
同时(计数<10)
{
控制台。写(“输入您的姓名:”);
Name=Console.ReadLine();
控制台。写入(“输入您的ID:”;
ID=int.Parse(Console.ReadLine());
控制台。写(“输入您的年龄:”;
Age=int.Parse(Console.ReadLine());
控制台。写(“输入您的电子邮件:”);
Email=Console.ReadLine();
StreamWriter Sw=新的StreamWriter(“fileone.txt”,true);
string output=string.Format(“感谢您的注册!您提交的信息是:“+Environment.NewLine+”Name:{0}”
+Environment.NewLine+“ID:{1}”+Environment.NewLine+“Age:{2}”+Environment.NewLine+“E-mail:{3}”,姓名、ID、年龄、电子邮件);
控制台写入线(输出);
软件写入线(输出+环境换行);
Console.ReadLine();
Sw.Close();
计数++;
}
}
}

如果有人能帮我,我会很高兴的。谢谢。

序列化和反序列化是一个非常大的主题,无法回答任何问题

但是,既然您要问从何处开始,我建议您研究
ISerializable
接口


祝你好运。

序列化和反序列化是一个非常大的主题,一个问题也解决不了

但是,既然您要问从何处开始,我建议您研究
ISerializable
接口


祝你好运。

简而言之,请看一本书中的这些。阅读有关序列化的一章也会有所帮助。

简而言之,请看一本书中的这些内容。阅读有关序列化的一章也会有所帮助。

您需要做的第一件事是去掉那些静态字段;大多数序列化程序都处理对象。。。因此,让我们创建一个

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”,但它们都不是可追加的
BinaryFormatter
是一个糟糕的选择(只有极少数例外)。我有点偏颇,但一个简单易用的可追加序列化格式的示例是协议缓冲区,所以我将使用它-注意,这是一种二进制格式,但使用简单。我们需要做的第一件事是添加(可能通过VisualStudio中的nuget包管理器)。然后我们需要告诉它如何处理我们的类型,这是通过注释完成的:

[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.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);
    }
}
使用(var file=file.OpenRead(“fileone.bin”))
{
foreach(Serializer.DeserializeItems中的变量person(
文件,PrefixStyle.Base128,Serializer.ListItemTag)
{
WriteLine(“{0},{1},{2},{3}”,
person.ID、person.Name、person.Age、person.Email);
}
}

您需要做的第一件事就是去掉那些静态字段;大多数序列化程序都处理对象。。。因此,让我们创建一个

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”,但它们都不是可追加的
BinaryFormatter
是一个糟糕的选择(只有极少数例外)。我有点偏颇,但一个简单易用的可追加序列化格式的示例是协议缓冲区,所以我将使用它-注意,这是一种二进制格式,但使用简单。我们需要做的第一件事是添加(可能通过VisualStudio中的nuget包管理器)。然后我们需要告诉它如何处理我们的类型,这是通过注释完成的:

[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.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);
    }
}
使用(var file=file.OpenRead(“fileone.bin”))
{
foreach(Serializer.DeserializeItems中的变量person(
文件,PrefixStyle.Base128,Serializer.ListItemTag)
{
WriteLine(“{0},{1},{2},{3}”,
person.ID、person.Name、person.Age、person.Email);
}
}

您想从什么开始序列化这个简单易用的结果:C#和DOM(XML序列化程序):您想从什么开始序列化这个简单易用的结果:C#和DOM(XML序列化程序):+1表示ISerializable指针。但是,当你祝他“好运”时,我感到原力中有一股巨大的骚动——编程不应该依赖运气(大部分)更进一步的信息:在实现
ISerializable
@Najzero时,可能是最好的开始——这是一个表达式。我想我从来没有听过有人在谈论工作时说“好好工作”或“你的努力会得到回报的”。@MarcGravel真的吗?我从来就不需要比这更多的东西。@LightStriker那个API暗示正在使用BinaryFormatter,它比在一个微妙诡异的周末休息时的微妙诡异的事情有更多微妙的诡异。+1表示ISerializable指针。但是当你祝他“好运”的时候,我在原力中感到了很大的不安——编程不应该依赖运气(主要是)更进一步的信息:可能是实现时最好的开始