In the following C# serialization & deserialization example, I don't get how "member3" is printed correctly to the console despite not being serialized in the xml file. Same when setting the fields private and therefore they are also not serialized in the data.xml (but still printed to console).
What am I missing?
public class Test
{
public static void Main()
{
SerializableTestObject testObject = new SerializableTestObject();
Stream stream = File.Open("data.xml", FileMode.Create);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(SerializableTestObject));
xmlSerializer.Serialize(stream, testObject);
stream.Close();
testObject = null;
stream = File.Open("data.xml", FileMode.Open);
testObject = xmlSerializer.Deserialize(stream) as SerializableTestObject;
stream.Close();
testObject?.Print();
}
}
[Serializable]
public class SerializableTestObject
{
public int member1;
public string member2;
[NonSerialized]
bool member3;
public SerializableTestObject()
{
member1 = 24;
member2 = "Hello World";
member3 = true;
}
public void Print()
{
Console.WriteLine($"member1: {member1}");
Console.WriteLine($"member2: {member2}");
Console.WriteLine($"member3: {member3}");
Console.Read();
}
}
`
The console output shows:
member1: 24
member2: Hello World
member3: True
How is member3 set correctly to 'true' despite not being serialized and therefore not deserialized?
I looked through the XmlSerializer documentation but couldn't find what I needed.