using System.Xml.Serialization;
public static class Serialization
public static string SerializeObject<T>(this T toSerialize, bool namespaced = true)
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringWriter textWriter = new StringWriter();
var ns = new XmlSerializerNamespaces();
xmlSerializer.Serialize(textWriter, toSerialize, ns);
return textWriter.ToString();
public static T DeserializeObject<T>(this string objectData)
return (T)DeserializeObject(objectData, typeof(T));
public static object DeserializeObject(this string objectData, Type type)
var serializer = new XmlSerializer(type);
using (TextReader reader = new StringReader(objectData))
result = serializer.Deserialize(reader);
[XmlRoot("GetDataItemTypes")]
public class GetDataItemTypesRequest
public int? OwnerId { get; set; }
public string[] Types { get; set; }
[XmlElement("GetDataItemTypes")]
public GetDataItemTypesRequest getDataItemTypesRequest { get; set; }
public int RecordID { get; set; }
public string Type { get; set; }
public CMessage Message { get; set; }
public static void Main()
var v = new GetDataItemTypesRequest () {
Types = new string[]{"AccountTemplates", "CounterpartTemplates", "CommissionGroups", "AccessProfiles", "MarginCallProfiles"}
Console.WriteLine(v.SerializeObject(false));
CData deserializedData = new CData();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(CData));
<RecordID>430973</RecordID>
<Type>SaxoCMSGetDataItemTypes</Type>
<OwnerId>8943529</OwnerId>
</Types></GetDataItemTypes></Message></Data>";
using (TextReader reader = new StringReader(input))
deserializedData = (CData)xmlSerializer.Deserialize(reader);
Console.WriteLine(deserializedData.SerializeObject(false));