I have a desktop app which uses Serialization and saves data before closing and load same data from file using this code:
IFormatter formatter = new BinaryFormatter();
var array = (MyClass[])formatter.Deserialize(stream);
MyClass has a datime property and its field. I need to make it nullable but i got Value cannot be null.\r\nParameter name: value InnerException when i made them both nullable like that.
public DateTime? MyDate
{
get
{
return myDate;
}
set
{
if (myDate != value)
{
myDate = value;
}
}
}
Then, I updated my code as follows
public DateTime? MyDate
{
get
{
return myDate;
}
set
{
if (value != null && myDate != value)
{
myDate = value;
}
}
}
Error occured in deserialization process as before. Then i had to make field non nullable and change property like as follows
public DateTime? MyDate
{
get
{
if (myDate == DateTime.MinValue)
{
return null;
}
else
{
return myDate;
}
}
set
{
if (myDate != value)
{
if (value == null)
{
myDate = DateTime.MinValue;
}
else
{
myDate = (DateTime)value;
}
onPropertyChanged("MyDate");
}
}
}
That workaround worked as i expected but i cant understant why second code does not work for DateTime while same code works for nullable decimal properties. what is difference beetween field and propery when they have value of null?