nmoneys icon indicating copy to clipboard operation
nmoneys copied to clipboard

Xml Serialization Support

Open dgg opened this issue 6 months ago • 0 comments

Since serialization support has been dropped in version 7 some help needs to be provided. For XML serialization a record XmlSerializableMoney will be provided for use in DTOs. It will be convertible to and from Money and will provide facilities to either create or modify XmlAttributeOverrides to pass to a XmlSerializer instance to reshape how the XmlSerializableMoney is XML serialized.

public readonly record struct SerializableMoney(decimal Amount, CurrencyIsoCode Currency);

public record MoneyContainerDto([property: XmlAttribute(attributeName: "da_name")]string Name, [property: XmlElement(ElementName =  "da_money")]SerializableMoney Money)
{
	public MoneyContainerDto() : this(string.Empty, new SerializableMoney()) { }
}

var overrides = new XmlAttributeOverrides();
		
overrides.Add(typeof(SerializableMoney), new XmlAttributes
{
	Xmlns = false,
	XmlRoot = new XmlRootAttribute("money")
});
overrides.Add(typeof(SerializableMoney), "Currency", new XmlAttributes
{
	XmlElements = { new XmlElementAttribute("currency") }
});
overrides.Add(typeof(SerializableMoney), "Amount", new XmlAttributes
{
	XmlElements = { new XmlElementAttribute("amount") }
});
XmlSerializer mcs = new XmlSerializer(typeof(MoneyContainerDto), overrides);

dgg avatar Dec 29 '23 13:12 dgg