[英]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.