#xml #serialization #c#-4.0
#xml #сериализация #c#-4.0
Вопрос:
У меня есть класс C #, который должен быть сериализован как XML. Один из подузлов имеет идентификатор последовательности, который увеличивается. Работает следующий код.
public class PlansSummary
{
public int Id { get; set; }
public List<Plan> Plans { get; set; } = new List<Plan>();
public string ToXml()
{
var serializer = new XmlSerializer(this.GetType());
using (var stringXml = new StringWriter())
{
serializer.Serialize(stringXml, this);
return stringXml.ToString();
}
}
}
public class Plan
{
private static int _sequenceCount = 1;
public Plan()
{
_sequenceCount ;
}
//// In this property, 'set' must exist and be public for XmlSerializer to work
public int sequence { get; set; } = _sequenceCount;
public DateTime planStartDate { get; set; }
public DateTime planEndDate { get; set; }
}
Но ничто не мешает следующему разработчику использовать мой класс и использовать параметр set в свойстве sequence. Я не могу сделать последовательность закрытой или доступной только для чтения, потому что это остановит отображение последовательности в XML. Есть ли решение для этого?
Ответ №1:
Работает ли это, если вы реализуете пустой установщик?
public class Plan
{
private static int _sequenceCount = 0;
private int _sequenceReturn = 0;
public Plan()
{
_sequenceCount ;
_sequenceReturn = _sequenceCount;
}
public int sequence
{
get
{
return _sequenceReturn;
}
set { }
}
public DateTime planStartDate { get; set; }
public DateTime planEndDate { get; set; }
}
Комментарии:
1. Нет, фактически это делает что-то неожиданное. Если у меня есть четыре объекта плана в моем списке планов, то порядковый номер равен 5 для всех четырех из них.
2. Я обновил кодовый блок — если вы реализуете переменную экземпляра (в данном случае _sequenceReturn) вместе с пустым параметром установки, вы должны обнаружить, что последовательность работает так, как изначально предполагалось.