From 1bff20e262a0392e0c249a2998dedd112b15ef60 Mon Sep 17 00:00:00 2001 From: Lukas Gasselsberger Date: Wed, 22 Sep 2021 18:22:37 +0200 Subject: [PATCH 01/11] Generic read/write --- openTRANS/{XmlCreator.cs => Xml.cs} | 61 ++++++++++++----------------- openTRANS/XmlReader.cs | 33 ---------------- 2 files changed, 26 insertions(+), 68 deletions(-) rename openTRANS/{XmlCreator.cs => Xml.cs} (51%) delete mode 100644 openTRANS/XmlReader.cs diff --git a/openTRANS/XmlCreator.cs b/openTRANS/Xml.cs similarity index 51% rename from openTRANS/XmlCreator.cs rename to openTRANS/Xml.cs index 5487781..b7b1de6 100644 --- a/openTRANS/XmlCreator.cs +++ b/openTRANS/Xml.cs @@ -2,54 +2,48 @@ using System.Text; using System.Xml.Serialization; -namespace openTRANS -{ - public class XmlCreator - { +namespace openTRANS { + public static class Xml { //private readonly string xmlVersion = "1.0"; //private readonly Encoding encoding = new UpperCaseUTF8Encoding(); //Previously Encoding.Utf8; in case of changing also change StringWriter below; would otherwise produce wrong xml encoding attribute //private readonly bool standalone = true; //private readonly XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; - private readonly Order order; - public XmlCreator(Order order) => this.order = order; - - public string Result - { - get - { - //var xdoc = new XDocument( - // new XDeclaration(xmlVersion, encoding.WebName, standalone ? "yes" : "no") - // ); + static Xml() { + } + public static string Serialize(T o) where T : class, new() { - var xmlns = new XmlSerializerNamespaces(); - xmlns.Add(nameof(Common.Namespace.xsi), Common.Namespace.xsi); - xmlns.Add(nameof(Common.Namespace.bmecat), Common.Namespace.bmecat); - xmlns.Add(nameof(Common.Namespace.xmime), Common.Namespace.xmime); - xmlns.Add(nameof(Common.Namespace.xsig), Common.Namespace.xsi); + var xmlns = new XmlSerializerNamespaces(); + xmlns.Add(nameof(Common.Namespace.xsi), Common.Namespace.xsi); + xmlns.Add(nameof(Common.Namespace.bmecat), Common.Namespace.bmecat); + xmlns.Add(nameof(Common.Namespace.xmime), Common.Namespace.xmime); + xmlns.Add(nameof(Common.Namespace.xsig), Common.Namespace.xsi); - XmlSerializer serializer = new XmlSerializer(typeof(Order)); - using (var writer = new UTF8StringWriter()) - { - serializer.Serialize(writer, order, xmlns); - return writer.ToString(); - } + XmlSerializer serializer = new XmlSerializer(typeof(o)); + using (var writer = new UTF8StringWriter()) { + serializer.Serialize(writer, o, xmlns); + return writer.ToString(); } } + public static T Deserialize(string xml) { + var serializer = new XmlSerializer(typeof(T)); + + using (TextReader reader = new StringReader(xml)) { + return (T)serializer.Deserialize(reader); + } + } //https://stackoverflow.com/questions/3871738/force-xdocument-to-write-to-string-with-utf-8-encoding - private class Utf8StringWriter : StringWriter - { + private class Utf8StringWriter : StringWriter { public override Encoding Encoding { get { return Encoding.UTF8; } } } //writes UTF-8 in uppercase; see class below - private class UTF8StringWriter : StringWriter - { + private class UTF8StringWriter : StringWriter { public override Encoding Encoding { get { return new UpperCaseUTF8Encoding(); } } } @@ -58,15 +52,12 @@ private class UTF8StringWriter : StringWriter /// Sometimes utf-8 definition in first line needed in uppercase by suppliers. /// https://stackoverflow.com/questions/4291332/utf-8-in-uppercase /// - public class UpperCaseUTF8Encoding : UTF8Encoding - { + public class UpperCaseUTF8Encoding : UTF8Encoding { public override string WebName => base.WebName.ToUpper(); - public static UpperCaseUTF8Encoding UpperCaseUTF8 - { - get - { + public static UpperCaseUTF8Encoding UpperCaseUTF8 { + get { if (upperCaseUtf8Encoding == null) upperCaseUtf8Encoding = new UpperCaseUTF8Encoding(); return upperCaseUtf8Encoding; diff --git a/openTRANS/XmlReader.cs b/openTRANS/XmlReader.cs deleted file mode 100644 index 0da4d88..0000000 --- a/openTRANS/XmlReader.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.IO; -using System.Xml.Serialization; - -namespace openTRANS -{ - public class XmlReader - { - private string orderResponse; - - - public XmlReader(string orderResponse) - { - this.orderResponse = orderResponse; - } - - - public OrderResponse Result - { - get - { - var serializer = new XmlSerializer(typeof(OrderResponse)); - OrderResponse orderResponse; - - using (TextReader reader = new StringReader(this.orderResponse)) - { - orderResponse = (OrderResponse)serializer.Deserialize(reader); - } - return orderResponse; - } - } - - } -} From e81dc6b01b51667c2919daa5f0b56992c8b4913a Mon Sep 17 00:00:00 2001 From: Lukas Gasselsberger Date: Wed, 22 Sep 2021 18:25:00 +0200 Subject: [PATCH 02/11] Add `where` clause at `Deserialize` method --- openTRANS/Xml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openTRANS/Xml.cs b/openTRANS/Xml.cs index b7b1de6..514b369 100644 --- a/openTRANS/Xml.cs +++ b/openTRANS/Xml.cs @@ -30,7 +30,7 @@ static Xml() { } } - public static T Deserialize(string xml) { + public static T Deserialize(string xml) where T : class, new() { var serializer = new XmlSerializer(typeof(T)); using (TextReader reader = new StringReader(xml)) { From cafb10d9ef617f0ab337e71ad5d4778f6952d544 Mon Sep 17 00:00:00 2001 From: Lukas Gasselsberger Date: Wed, 22 Sep 2021 18:31:38 +0200 Subject: [PATCH 03/11] Update README.md --- README.md | 7 ++++++- testform/testform.cs | 5 ++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 20d2d9d..3d896ce 100644 --- a/README.md +++ b/README.md @@ -99,9 +99,14 @@ oi.ProductPriceFix.PriceAmount = 14; //oi.ProductPriceFix.AllowOrChargesFix.AllowOrCharge.Type = AllowOrChargeTypes.Allowance; o.OrderItemList.Add(oi); + + +textBox1.Text = Xml.Serialize(o); } -var ot = new XmlCreator(o).Result; +private void textBox2_TextChanged(object sender, EventArgs e) { + OrderResponse response = Xml.Deserialize(textBox2.Text); +} ``` # Links diff --git a/testform/testform.cs b/testform/testform.cs index 5ec9ed1..15d6f98 100644 --- a/testform/testform.cs +++ b/testform/testform.cs @@ -137,12 +137,11 @@ private void testform_Load(object sender, EventArgs e) o.OrderItemList.Add(oi); } - var ot = new XmlCreator(o); - textBox1.Text = ot.Result; + textBox1.Text = Xml.Serialize(o); } private void textBox2_TextChanged(object sender, EventArgs e) { - OrderResponse response = new XmlReader(textBox2.Text).Result; + OrderResponse response = Xml.Deserialize(textBox2.Text); } } } From 4778f56a746ee11ce12f7297da2735ac067b3e8d Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Thu, 23 Sep 2021 07:42:01 +0200 Subject: [PATCH 04/11] Fix minor typo --- openTRANS/Xml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openTRANS/Xml.cs b/openTRANS/Xml.cs index 514b369..6bc71cc 100644 --- a/openTRANS/Xml.cs +++ b/openTRANS/Xml.cs @@ -23,7 +23,7 @@ static Xml() { xmlns.Add(nameof(Common.Namespace.xsig), Common.Namespace.xsi); - XmlSerializer serializer = new XmlSerializer(typeof(o)); + XmlSerializer serializer = new XmlSerializer(typeof(T)); using (var writer = new UTF8StringWriter()) { serializer.Serialize(writer, o, xmlns); return writer.ToString(); From 0e352e6dffd82327061272e473d53e340c591dfd Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Thu, 23 Sep 2021 10:46:35 +0200 Subject: [PATCH 05/11] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3d896ce..f48c089 100644 --- a/README.md +++ b/README.md @@ -104,10 +104,8 @@ o.OrderItemList.Add(oi); textBox1.Text = Xml.Serialize(o); } -private void textBox2_TextChanged(object sender, EventArgs e) { - OrderResponse response = Xml.Deserialize(textBox2.Text); -} +OrderResponse response = Xml.Deserialize(textBox2.Text); ``` # Links -- Website https://www.dxsdata.com/2019/08/opentrans-for-net-core/ \ No newline at end of file +- Website https://www.dxsdata.com/2019/08/opentrans-for-net-core/ From 97bca21dd44075905b3367c92b01b4f188936139 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:29:20 +0200 Subject: [PATCH 06/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f48c089..dcf1309 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ oi.ProductPriceFix.PriceAmount = 14; o.OrderItemList.Add(oi); -textBox1.Text = Xml.Serialize(o); +string xml = Xml.Serialize(o); } OrderResponse response = Xml.Deserialize(textBox2.Text); From 588095f5b6d8f57e9c53989f7f8dae0e44515065 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:53:51 +0200 Subject: [PATCH 07/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dcf1309..864de9c 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ o.OrderItemList.Add(oi); string xml = Xml.Serialize(o); } -OrderResponse response = Xml.Deserialize(textBox2.Text); +OrderResponse response = Xml.Deserialize(serializedXmlData); ``` # Links From edc282dce72b6e4947e793c0549bd36cdb751bd6 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:34:14 +0200 Subject: [PATCH 08/11] Create IOpenTransBase.cs --- openTRANS/IOpenTransBase.cs | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 openTRANS/IOpenTransBase.cs diff --git a/openTRANS/IOpenTransBase.cs b/openTRANS/IOpenTransBase.cs new file mode 100644 index 0000000..3af226e --- /dev/null +++ b/openTRANS/IOpenTransBase.cs @@ -0,0 +1,4 @@ +namespace openTRANS { + public interface IOpenTransBase { + } +} From ec82810560193c460d84743336433555345b80e6 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:34:59 +0200 Subject: [PATCH 09/11] Update Order.cs --- openTRANS/ORDER/Order.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openTRANS/ORDER/Order.cs b/openTRANS/ORDER/Order.cs index 38a0583..ba750cd 100644 --- a/openTRANS/ORDER/Order.cs +++ b/openTRANS/ORDER/Order.cs @@ -6,7 +6,7 @@ namespace openTRANS { [XmlRoot("ORDER", Namespace = "http://www.opentrans.org/XMLSchema/2.1", IsNullable = false)] - public partial class Order + public partial class Order : IOpenTransBase { [XmlAttribute("schemaLocation", Namespace = XmlSchema.InstanceNamespace)] public string xsiSchemaLocation = "http://www.opentrans.org/XMLSchema/2.1%20opentrans_2_1.xsd"; From 7be2eb6f29f6ba6a8d40c6899234a7990cd28f06 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:35:49 +0200 Subject: [PATCH 10/11] Update OrderResponse.cs --- openTRANS/ORDERRESPONSE/OrderResponse.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openTRANS/ORDERRESPONSE/OrderResponse.cs b/openTRANS/ORDERRESPONSE/OrderResponse.cs index 98790fc..3d74cca 100644 --- a/openTRANS/ORDERRESPONSE/OrderResponse.cs +++ b/openTRANS/ORDERRESPONSE/OrderResponse.cs @@ -4,7 +4,7 @@ namespace openTRANS { [XmlRoot("ORDERRESPONSE", Namespace = "http://www.opentrans.org/XMLSchema/2.1", IsNullable = false)] - public partial class OrderResponse + public partial class OrderResponse : IOpenTransBase { [XmlAttribute("version")] public string Version = "2.1"; @@ -26,4 +26,4 @@ public OrderResponseSummary OrderResponseSummary set { } } } -} \ No newline at end of file +} From 54d799ca312499b882b2865e03fe93e13b5bda63 Mon Sep 17 00:00:00 2001 From: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:37:31 +0200 Subject: [PATCH 11/11] Update Xml.cs --- openTRANS/Xml.cs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/openTRANS/Xml.cs b/openTRANS/Xml.cs index 6bc71cc..28cea4c 100644 --- a/openTRANS/Xml.cs +++ b/openTRANS/Xml.cs @@ -4,17 +4,10 @@ namespace openTRANS { public static class Xml { - //private readonly string xmlVersion = "1.0"; - //private readonly Encoding encoding = new UpperCaseUTF8Encoding(); //Previously Encoding.Utf8; in case of changing also change StringWriter below; would otherwise produce wrong xml encoding attribute - //private readonly bool standalone = true; - - //private readonly XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; - - static Xml() { } - public static string Serialize(T o) where T : class, new() { + public static string Serialize(T o) where T : class, IOpenTransBase { var xmlns = new XmlSerializerNamespaces(); xmlns.Add(nameof(Common.Namespace.xsi), Common.Namespace.xsi); @@ -30,7 +23,7 @@ static Xml() { } } - public static T Deserialize(string xml) where T : class, new() { + public static T Deserialize(string xml) where T : class, IOpenTransBase { var serializer = new XmlSerializer(typeof(T)); using (TextReader reader = new StringReader(xml)) {