C # XML-сериализация последовательного идентификатора - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть класс 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 Ответ

0 голосов
/ 24 апреля 2019

Работает ли, если вы реализуете пустой сеттер?

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; }
}
...