using System.Collections.Generic;
using System.Xml.Serialization;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Collections;
[XmlAttribute("__serviceType")]
public string ServiceType { get; set; }
public Perform Perform { get; set; }
public List<InputData> InputData { get; set; }
[XmlElement("__perform", Type = typeof(Perform))]
[XmlElement("__inputData", Type = typeof(InputData))]
public object[] XmlInputAndPerformance
var inputData = (InputData ?? Enumerable.Empty<InputData>()).Cast<object>();
var performData = Perform == null ? Enumerable.Empty<object>() : new object[] { Perform };
.Concat(inputData.Skip(1))
var newInputs = value.OfType<InputData>().ToList();
var newPerform = value.OfType<Perform>().ToList();
if (newInputs.Count + newPerform.Count != value.Length)
throw new ArgumentException("Unknown type.");
if (newPerform.Count > 1)
throw new ArgumentException("Too many Perform objects.");
if (newPerform.Count > 0)
(InputData = InputData ?? new List<InputData>()).AddRange(newInputs);
[XmlElement("__execute")]
public Execute Execute { get; set; }
[XmlElement("__requestData")]
public RequestData RequestData { get; set; }
[XmlRoot(ElementName = "__execute")]
[XmlRoot(ElementName = "BaseToChange")]
public class BaseToChange
[XmlElement(ElementName = "__name")]
public string __name { get; set; }
[XmlRoot(ElementName = "__inputData")]
[XmlElement(ElementName = "BaseToChange")]
public BaseToChange BaseToChange { get; set; }
[XmlElement(ElementName = "ObjectChanges")]
public ObjectChanges ObjectChanges { get; set; }
[XmlRoot(ElementName = "__perform")]
[XmlElement(ElementName = "__eventName")]
public string __eventName { get; set; }
[XmlRoot(ElementName = "ObjectChanges")]
public class ObjectChanges
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlRoot(ElementName = "__requestData")]
[XmlElement(ElementName = "CompletionMsg")]
public string CompletionMsg { get; set; }
[XmlRoot(ElementName = "__Root")]
[XmlElement(ElementName = "__service")]
public Service __service { get; set; }
[XmlAttribute(AttributeName = "__version")]
public string __version { get; set; }
[XmlAttribute(AttributeName = "__encryption")]
public string __encryption { get; set; }
var xml = @"<?xml version=""1.0""?>
<__Root __version=""1.1"" __encryption=""2"">
<__service __serviceType=""Test"">
<__name>TestName</__name>
<__eventName>Event</__eventName>
public static void Test()
public static void Test0()
Console.WriteLine("Testing input XML: ");
var root = xml.LoadFromXml<__Root>();
var xml2 = root.GetXml(true);
Console.WriteLine("\nDeserialized and re-serialized XML: ");
var ok = XNode.DeepEquals(XElement.Parse(xml), XElement.Parse(xml2));
throw new AssertionFailedException("Original and re-serialized XML are NOT equivalent.");
Console.WriteLine("Original and re-serialized XML are equivalent.");
private static void Test1()
Console.WriteLine("Testing empty {0}", typeof(__Root));
var root3 = new __Root() { __service = new Service() };
var xml3 = root3.GetXml();
var root4 = xml3.LoadFromXml<__Root>();
var xml4 = root4.GetXml();
public static void Main()
public static class XmlSerializationHelper
public static T LoadFromXml<T>(this string xmlString, XmlSerializer serial = null)
serial = serial ?? new XmlSerializer(typeof(T));
T returnValue = default(T);
using (StringReader reader = new StringReader(xmlString))
object result = serial.Deserialize(reader);
public static string GetXml<T>(this T obj, bool omitStandardNamespaces)
return obj.GetXml(null, omitStandardNamespaces);
public static string GetXml<T>(this T obj, XmlSerializer serializer = null, bool omitStandardNamespaces = false)
XmlSerializerNamespaces ns = null;
if (omitStandardNamespaces)
ns = new XmlSerializerNamespaces();
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings() { Indent = true };
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
(serializer ?? new XmlSerializer(obj.GetType())).Serialize(xmlWriter, obj, ns);
return textWriter.ToString();
public class AssertionFailedException : System.Exception
public AssertionFailedException() : base() { }
public AssertionFailedException(string s) : base(s) { }
public static class Assert
public static void IsTrue(bool value)
throw new AssertionFailedException("failed");