{"id":2840,"date":"2019-11-12T08:48:39","date_gmt":"2019-11-12T07:48:39","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=2840"},"modified":"2024-05-03T13:05:07","modified_gmt":"2024-05-03T12:05:07","slug":"c-typed-xml-parsing","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-typed-xml-parsing\/","title":{"rendered":"C# Typed Xml Parsing"},"content":{"rendered":"\n<p>Generate classes from XML by: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copying the available XML to clipboard<\/li>\n\n\n\n<li>In <strong>Visual Studio<\/strong> select in menu <strong>Edit<\/strong><\/li>\n\n\n\n<li><strong>Paste special<\/strong> > <strong>Paste as XML classes<\/strong><\/li>\n\n\n\n<li>Cleanup classes, adjust types + Add Attributes (XmlRoot, XmlType, XmlElement, XmlArray, XmlAttribute)<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing System.ComponentModel;\nusing System.Xml.Serialization;\n\nnamespace Models\n{\n    [Serializable]\n    [DesignerCategory(\"code\")]\n    [XmlType(AnonymousType = true)]\n    \/\/[XmlRoot(\"NewGroupName\")] \/\/ xml root element\n    \/\/[XmlType(\"NewTypeName\")] \/\/ xml schema\n    public class MessagesMessage\n    {\n        [XmlElement(\"MessageStandard\")]\n        public string MessageStandard { get; set; }\n        public byte MessageType { get; set; }\n        public string MessageDate { get; set; }\n        public string IsTestMessage { get; set; }\n        public string OrderNumberBuyer { get; set; }\n        public string IsNormalOrder { get; set; }\n        public string IsCrossdock { get; set; }\n        public string IsAcknowledgementRequested { get; set; }\n        public ulong BuyerGLN { get; set; }\n        public string SupplierGLN { get; set; }\n        public ulong DeliveryPartyGLN { get; set; }\n        public string ShipFromPartyGLN { get; set; }\n        public string UltimateConsigneeGLN { get; set; }\n        public ulong InvoiceeGLN { get; set; }\n        public string IsDutyFree { get; set; }\n        public string IsBackhauling { get; set; }\n        public ulong MessageReference { get; set; }\n        [XmlElement(\"Article\")]\n        public MessagesMessageArticle[] Article { get; set; }\n    }\n\t\n\tpublic class XmlHelper\n\t{\n\t\tpublic static T ParseXML&lt;T>(string xml) where T : class\n        {\n            using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml.Trim())))\n            {\n                var reader = XmlReader.Create(stream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });\n                return new XmlSerializer(typeof(T)).Deserialize(reader) as T;\n            }\n        }\n\t\t\n\t\tpublic static void Example() \n\t\t{\n\t\t\tvar message = TransusApi.ParseXML&lt;MessagesMessage>(ExampleOrderMessage());\n\t\t}\n\t}\n}\n<\/pre>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"csharp\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">using System.Xml;\r\nusing System.Xml.Serialization;\r\n\r\npublic static T ParseXML&lt;T>(string xml) where T : class\r\n{\r\n    try\r\n    {\r\n        if (string.IsNullOrWhiteSpace(xml))\r\n            return null;\r\n\r\n        using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml.Trim())))\r\n        {\r\n            var reader = XmlReader.Create(stream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });\r\n            return new XmlSerializer(typeof(T)).Deserialize(reader) as T;\r\n        }\r\n    }\r\n    catch (InvalidOperationException)\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\npublic static string SerializeXML&lt;T>(T obj) where T : class\r\n{\r\n    using (var stream = new MemoryStream())\r\n    using (var reader = new StreamReader(stream))\r\n    {\r\n        new XmlSerializer(typeof(T)).Serialize(stream, obj);\r\n        stream.Position = 0;\r\n        return reader.ReadToEnd();\r\n    }\r\n}<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Generate classes from XML by:<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-2840","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=2840"}],"version-history":[{"count":4,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2840\/revisions"}],"predecessor-version":[{"id":8505,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/2840\/revisions\/8505"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=2840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=2840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=2840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}