У меня есть класс с некоторыми коллекциями в них, и я хотел бы сериализовать экземпляры этого класса в XML без необходимости инициализировать коллекции как пустые и без необходимости реализации IXmlSerializable. Мне все равно, если он создает пустые элементы, или не создает элементы вообще. Просто он работает без инициализации коллекции для каждого свойства на основе коллекции.
Я посмотрел на все атрибуты XML, которыми могу украсить свойства, и не добился успеха в этом. Это кажется простой вещью, которая может иметь элемент или вообще не иметь элемента. Затем, когда он десериализуется, он просто оставляет их нулевыми или игнорирует их.
Вот простая версия класса, используемая для решения этой проблемы. Используя это и значения по умолчанию, вы получаете исключение «Ссылка на объект не установлена на экземпляр объекта» из-за того, что коллекции равны нулю;
public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }
public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}
EDIT
Спасибо за помощь, ребята, оказывается, проблема была в моем методе GetHashCode, который не обрабатывал нуль правильно. Как только я исправил это, все было хорошо. Я отметил первый ответ, который будет правильным. Извините за красную сельдь, но работа с вами, ребята, помогла.