using System.Xml.Serialization;
public static void Main()
Invoice invoice = new Invoice()
TaxTotal = new TaxTotal()
TaxAmount = new MonetaryValue("DKK", 37.50M),
TaxSubtotal = new TaxSubtotal()
TaxableAmount = new MonetaryValue("DKK", 150.00M),
TaxAmount = new MonetaryValue("DKK", 37.50M),
TaxCategory = new TaxCategory()
ID = IDFactory.CreateForTaxCategory("StandardRated"),
TaxScheme = new TaxScheme()
ID = IDFactory.CreateForTaxScheme("63"),
SerializeAndPrintToConsole(invoice);
public static void SerializeAndPrintToConsole(Invoice taxScheme)
XmlSerializer serializer = new XmlSerializer(typeof(Invoice));
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2");
namespaces.Add("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2");
namespaces.Add("ccts", "urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2");
namespaces.Add("udt", "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2");
namespaces.Add("", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2");
StringWriter stringWriter = new StringWriter();
serializer.Serialize(stringWriter, taxScheme, namespaces);
string xmlString = stringWriter.ToString();
Console.WriteLine("Serialized XML:");
Console.WriteLine(xmlString);
public static class IDFactory
public static ID CreateForTaxCategory(string value) =>
new ID { SchemeID = "urn:oioubl:id:taxcategoryid-1.1", SchemeAgencyID = "320", Value = value };
public static ID CreateForTaxScheme(string value) =>
new ID { SchemeID = "urn:oioubl:id:taxschemeid-1.1", Value = value };
[XmlRoot("ID", Namespace = XML_Namespaces_OIOUBL2.CBC)]
public class ID : IdentifierType { }
[XmlRoot("IdentifierType", Namespace = XML_Namespaces_OIOUBL2.CCT)]
public class IdentifierType
[XmlAttribute("schemeID")]
public string SchemeID { get; set; }
[XmlAttribute("schemeName")]
public string SchemeName { get; set; }
[XmlAttribute("schemeAgencyID")]
public string SchemeAgencyID { get; set; }
[XmlAttribute("schemeAgencyName")]
public string SchemeAgencyName { get; set; }
[XmlAttribute("schemeVersionID")]
public string SchemeVersionID { get; set; }
[XmlAttribute("schemeDataURI")]
public string SchemeDataURI { get; set; }
[XmlAttribute("schemeURI")]
public string SchemeURI { get; set; }
public string Value { get; set; }
public static class XML_Namespaces_OIOUBL2
public const string CBC = "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2";
public const string CAC = "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2";
public const string CCT = "urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2";
[XmlRoot(Namespace = "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2")]
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CAC)]
public TaxTotal TaxTotal { get; set; }
[XmlRoot(Namespace = XML_Namespaces_OIOUBL2.CAC)]
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public MonetaryValue TaxAmount { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CAC)]
public TaxSubtotal TaxSubtotal { get; set; }
[XmlRoot(Namespace = XML_Namespaces_OIOUBL2.CAC)]
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public MonetaryValue TaxableAmount { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public MonetaryValue TaxAmount { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CAC)]
public TaxCategory TaxCategory { get; set; }
[XmlRoot(Namespace = XML_Namespaces_OIOUBL2.CAC)]
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public ID ID { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public decimal Percent { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CAC)]
public TaxScheme TaxScheme { get; set; }
[XmlRoot(Namespace = XML_Namespaces_OIOUBL2.CAC)]
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public ID ID { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public string Name { get; set; }
[XmlElement(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public string CurrencyCode { get; set; }
[XmlRoot(Namespace = XML_Namespaces_OIOUBL2.CBC)]
public class MonetaryValue
[XmlAttribute("currencyID")]
public string CurrencyID { get; set; }
public decimal Value { get; set; }
public MonetaryValue(string currencyID, decimal value)