Я хочу сериализовать и десериализовать неизменяемый объект в 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 (), но этого не происходит.