繁体   English   中英

在对象C#WPF中反序列化null值

[英]Deserializing a null value in an object C# WPF

我正在序列化员工类的对象。 该类中的某些属性可能为null。 我需要使用null值反序列化对象,以便null属性将邮件重新发送为null。 尝试反序列化null值时,出现TargetInvocationException。 请帮帮我

public class Employee
{
   public string Name {get; set;}
   public string Id{get;set;}
}
public mainclass
{
   public void MainMethod()
   {
   Employee emp = new Employee();
   emp.ID = 1;
   //Name field is intentionally uninitialized
   Stream stream = File.Open("Sample.erl", FileMode.Create);
   BinaryFormatter bformatter = new BinaryFormatter();
   bformatter.Serialize(stream, sample);
   stream.Close()
   stream = File.Open("Sample.erl", FileMode.Open);
   bformatter = new BinaryFormatter();
   sample = (Employee)bformatter.Deserialize(stream); //TargetInvocationException here
   //It works fine if Name field is initialized
   stream.Close();
   Textbox1.text = sample.Name;
   Textbox2.text = sample.ID;
   }

}

我在LinqPad中尝试了您的代码(带有一些mod,上面的代码永远无法编译或工作)。 这工作正常:

void Main()
{
    Employee emp = new Employee();
    emp.Id = "1";

    const string path = @"C:\Documents and Settings\LeeP\Sample.erl";

    emp.Dump();

    using(var stream = File.Open(path, FileMode.Create))
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(stream, emp);
    }

    using(var stream = File.Open(path, FileMode.Open))
    {
        var formatter = new BinaryFormatter();
        var sample = (Employee)formatter.Deserialize(stream); 

        sample.Dump();
    }
}

// You need to mark this class as [Serializable]
[Serializable]
public class Employee
{
    public string Name {get; set;}
    public string Id{get;set;}
}

您只需要应用如上所述的required属性。

namespace SO
{
  using System;
  using System.IO;
  using System.Runtime.Serialization.Formatters.Binary;

  [Serializable]
  public class Employee
  {
    public string Name { get; set; }

    public string Id { get; set; }
  }

  public class Test
  {
    public static void Main()
    {
      var emp = new Employee { Id = "1" };
      //Name field is intentionally uninitialized

      using (var stream = File.Open("Sample.erl", FileMode.Create))
      {
        var bformatter = new BinaryFormatter();

        bformatter.Serialize(stream, emp);
      }

      using (var stream = File.Open("Sample.erl", FileMode.Open))
      {
        var bformatter = new BinaryFormatter();

        var empFromFile = (Employee)bformatter.Deserialize(stream);

        Console.WriteLine(empFromFile.Id);
        Console.ReadLine();
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM