【问题标题】:Serialization in .NET.NET 中的序列化
【发布时间】:2011-11-22 10:38:47
【问题描述】:

我的任务是序列化和反序列化一个对象。

我想知道:

  • 我的对象是否以我正在做的方式序列化
  • 我如何知道我的对象正在被序列化或反序列化

我没有在序列化方法中传递对象,而是传递object.properties。这对它有什么影响吗?

FileStream fs = new FileStream(@"D:\Rough Work\Serialization\Serialization\bin\Debug\Log.txt",FileMode.OpenOrCreate);
Laptop obj = new Laptop();
obj.Model = 2;
obj.SerialNumber = 4;
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, obj.Model);
formatter.Serialize(fs, obj.SerialNumber);

[Serializable]
class Laptop
{
    public int Model;
    public int SerialNumber;
}

【问题讨论】:

    标签: c# .net binary-serialization


    【解决方案1】:
    • 如果您可以成功反序列化一个对象,那么您就正确地对其进行了序列化。
    • 您不需要单独序列化属性。您可以序列化整个对象并以相同的方式反序列化它。

      using (var fs = new FileStream(@"D:\Rough Work\Serialization\Serialization\bin\Debug\Log.txt",FileMode.OpenOrCreate))
      {
          var formatter = new BinaryFormatter();
          formatter.Serialize(fs, obj);
      }
      
      using (var fs = new FileStream(@"D:\Rough Work\Serialization\Serialization\bin\Debug\Log.txt",FileMode.OpenOrCreate))
      {
          var formatter = new BinaryFormatter();
          obj = formatter.Deserialize(fs) as Laptop;
      }
      

    如果您的问题是笔记本电脑类如何知道它正在被序列化,那么您可能想要实现ISerializable 接口。

    BinaryFormatter.Deserialize

    【讨论】:

    • 嗯,这是我中期论文中的问题。我还通过在反序列化方法中传递 obj.Properties 以这种方式反序列化对象。
    • @AbidAli 如果您序列化属性,那么您还必须以相同的方式反序列化它们。两种情况下的序列化文件是不同的。
    【解决方案2】:

    您可以将序列化方法转换为字符串并输出到调试窗口

    【讨论】:

      【解决方案3】:

      我想知道: 我的对象是否以我正在做的方式序列化

      然后您可以使用 xml 序列化,这样您就可以检查您的序列化对象,因为它将是人类可读的形式。

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-04-26
        • 2011-01-22
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多