using System.ComponentModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using KGySoft.CoreLibraries;
using KGySoft.Serialization.Xml;
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public IList<string> PhoneNumbers { get; } = new Collection<string>();
public static void Main()
var person = ThreadSafeRandom.Instance.NextObject<Person>();
var options = XmlSerializationOptions.RecursiveSerializationAsFallback;
XElement element = XmlSerializer.Serialize(person, options);
var clone = (Person)XmlSerializer.Deserialize(element);
var sb = new StringBuilder();
XmlSerializer.Serialize(new StringWriter(sb), person, options);
clone = (Person)XmlSerializer.Deserialize(new StringReader(sb.ToString()));