[Fork] questions/42114531/populating-any-elements-on-a-web-service-in-c-sharp

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Threading;
using System.ComponentModel;
using System.Xml.Linq;
using System.Reflection;
using System.Data;
using System.Xml.Schema;
using System.Text.RegularExpressions;
using System.Net;
using System.Xml.XPath;
using System.Globalization;
using System.ComponentModel.DataAnnotations;
using System.Collections;

namespace Question42114531.V2
{
    // https://stackoverflow.com/questions/42114531/populating-any-elements-on-a-web-service-in-c-sharp

    public class GenericRequestData_Type
    {
        private System.Xml.XmlElement[] anyField;

        [System.Xml.Serialization.XmlAnyElementAttribute()]
        public System.Xml.XmlElement[] Any
        {
            get
            {
                return this.anyField;
            }
            set
            {
                this.anyField = value;
            }
        }
    }

    class TestClass
    {
        internal static void Test()
        {
            var dom = new XmlDocument();
            var contacts = dom.CreateElement("Contacts");
            dom.AppendChild(contacts);
            var contact = dom.CreateElement("Contact");
            contacts.AppendChild(contact);
            var name = dom.CreateElement("Name");
            contact.AppendChild(name);
            name.InnerText = "Patrick Hines";
            var phone = dom.CreateElement("Phone");
            contact.AppendChild(phone);
            phone.InnerText = "206-555-0144";
            var address = dom.CreateElement("Address");
            contact.AppendChild(address);
            var street1 = dom.CreateElement("Street1");
            address.AppendChild(street1);
            street1.InnerText = "123 Main St";
			var city = dom.CreateElement("City");
			address.AppendChild(city);
			city.InnerText = "Mercer Island";
            var state = dom.CreateElement("State");
            address.AppendChild(state);
            state.InnerText = "WA";
            var postal = dom.CreateElement("Postal");
            address.AppendChild(postal);
            postal.InnerText = "68042";

            var genericRequest = new GenericRequestData_Type();
            genericRequest.Any = new[] { dom.DocumentElement };

            Console.WriteLine(genericRequest.GetXml());
        }
    }


    public static class XmlSerializationHelper
    {
        public static T LoadFromXml<T>(this string xmlString)
        {
            using (StringReader reader = new StringReader(xmlString))
            {
                return (T)new XmlSerializer(typeof(T)).Deserialize(reader);
            }
        }

        public static string GetXml<T>(this T obj, XmlSerializer serializer = null, bool omitStandardNamespaces = false)
        {
            XmlSerializerNamespaces ns = null;
            if (omitStandardNamespaces)
            {
                ns = new XmlSerializerNamespaces();
                ns.Add("", ""); // Disable the xmlns:xsi and xmlns:xsd lines.
            }			
            using (var textWriter = new StringWriter())
            {
                var settings = new XmlWriterSettings() { Indent = true }; // For cosmetic purposes.
                using (var xmlWriter = XmlWriter.Create(textWriter, settings))
                    (serializer ?? new XmlSerializer(obj.GetType())).Serialize(xmlWriter, obj, ns);
                return textWriter.ToString();
            }
        }
    }
}	

public class Program
{
	public static void Main()
	{
		Question42114531.V2.TestClass.Test();
	}
}
;