XmlSerializer игнорирует GetObjectData () из ISerializable - PullRequest
1 голос
/ 10 июня 2019

Я хочу сериализовать и десериализовать неизменяемый объект в XML.Как мне добиться этого с помощью XmlSerializer?

Я уже реализовал интерфейс ISerializable и метод GetObjectData из него, но XmlSerializer игнорирует его.Видимо, при конвертации в JSON через Newtonsoft.Json все нормально.Я знаю, что могу достичь этого путем рефакторинга кода в DataContractSerializer, но я бы хотел сохранить существующий XmlSerializer в решении.Структура моего неизменяемого объекта определена ниже.

[Serializable]
public class CustomerNumberDefinition : ISerializable
{
    private CustomerNumberDefinition()
    {
    }

    private CustomerNumberDefinition(SerializationInfo info, StreamingContext text)
        : this()
    {
        this.KlpUserNumber = info.GetString(nameof(this.KlpUserNumber));
        this.RawCustomerNumber = info.GetString(nameof(this.RawCustomerNumber));
    }

    private CustomerNumberDefinition(string customerNumber, string klpUserNumber)
    {
        this.RawCustomerNumber = customerNumber;
        this.KlpUserNumber = klpUserNumber;
    }

    public string KlpUserNumber { get; }

    public string RawCustomerNumber { get; }

    public static CustomerNumberDefinition Create(string customerNumber, string klpUserNumber)
    {
        return new CustomerNumberDefinition(customerNumber, klpUserNumber);
    }

    [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)]
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue(nameof(this.KlpUserNumber), this.KlpUserNumber);
        info.AddValue(nameof(this.RawCustomerNumber), this.RawCustomerNumber);
    }
}

Я ожидаю, что при попытке сериализовать экземпляр класса CustomerNumberDefinition через XmlSerializer будет вызван GetObjectData (), но этого не происходит.

...