using System.Text; using System.Xml; using System.Xml.Serialization; namespace AyCode.Services.Nav; /// /// XML (de)szerializáció a NAV REST hívásokhoz. A NAV sima HTTP POST-ot vár, a body XML (UTF-8) — nincs SOAP. /// A generált XSD-modellek [XmlRoot]/[XmlElement] attribútumai adják a namespace-t és a sorrendet. /// public static class NavXmlHelper { /// /// A típust UTF-8 XML stringgé szerializálja. A biztosítja, hogy az XML-deklaráció /// encoding="utf-8" legyen (a default UTF-16-ot írna, amit a NAV elutasít). /// public static string Serialize(T value) { var serializer = new XmlSerializer(typeof(T)); using var stringWriter = new Utf8StringWriter(); using var xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = false, OmitXmlDeclaration = false, }); serializer.Serialize(xmlWriter, value); return stringWriter.ToString(); } /// A NAV válasz XML-t a megadott típusra deszerializálja. public static T Deserialize(string xml) { var serializer = new XmlSerializer(typeof(T)); using var reader = new StringReader(xml); return (T)serializer.Deserialize(reader)!; } /// /// , ami UTF-8-at jelez — így az az XML-deklarációba /// encoding="utf-8"-at ír. (A BCL alap -e UTF-16-ot jelez.) /// private sealed class Utf8StringWriter : StringWriter { public override Encoding Encoding => Encoding.UTF8; } }