using System.Collections.Generic;
using System.Xml.Serialization;
[XmlRoot("response", Namespace = "http://ws.gp.mnpartners.kz/services/bvu")]
[XmlType("response", Namespace = "")]
[System.Xml.Serialization.XmlArrayItem("item", IsNullable = false)]
public Data[] data { get => this.dataField; set => this.dataField = value; }
[XmlInclude(typeof(PersonData)), XmlInclude(typeof(CompanyData))]
[XmlType("data", Namespace = "")]
public virtual Person Person { get => this.personFiled; set => this.personFiled = value; }
public virtual bool ShouldSerializePerson() => true;
public virtual Company Company { get => this.companyFiled; set => this.companyFiled = value; }
public virtual bool ShouldSerializeCompany() => true;
[XmlType("person", Namespace = "http://ws.gp.mnpartners.kz/services/bvu")]
public class PersonData : Data
public PersonData() : base() { this.Person = new () { request = new() }; }
public override bool ShouldSerializePerson() => false;
public override bool ShouldSerializeCompany() => false;
public override Person Person { get => base.Person; set => base.Person = (value ?? throw new ArgumentNullException(nameof(value))); }
public override Company Company { get => base.Company; set => base.Company = (value == null ? null : throw new NotSupportedException(nameof(Company))); }
[XmlElement("request", Namespace = "")]
public PersonRequest request { get => Person.request; set => Person.request = value; }
[XmlType("person", Namespace = "")]
public PersonRequest request { get; set; } = new ();
public class PersonRequest
[XmlElement(ElementName="number")]
public string Number { get; set; }
[XmlElement(ElementName="surname")]
public string Surname { get; set; }
[XmlElement(ElementName="name")]
public string Name { get; set; }
[XmlElement(ElementName="birthDate")]
public string BirthDate { get; set; }
[XmlType("comapany", Namespace = "http://ws.gp.mnpartners.kz/services/bvu")]
public class CompanyData : Data
public CompanyData() : base() { this.Company = new () { request = new() }; }
public override bool ShouldSerializePerson() => false;
public override bool ShouldSerializeCompany() => false;
public override Company Company { get => base.Company; set => base.Company = (value ?? throw new ArgumentNullException(nameof(value))); }
public override Person Person { get => base.Person; set => base.Person = (value == null ? null : throw new NotSupportedException(nameof(Company))); }
[XmlElement("request", Namespace = "")]
public CompanyRequest request { get => Company.request; set => Company.request = value; }
[XmlType("comapany", Namespace = "")]
public CompanyRequest request { get; set; } = new ();
public class CompanyRequest
[XmlElement(ElementName="companyId")]
public string CompanyId { get; set; }
[XmlElement(ElementName="fullName")]
public string FullName { get; set; }
public static void Test()
public static void TestSerializeNew()
new PersonData { Person = new() { request = new() } },
new CompanyData { Company = new() { request = new() } }
public static void TestSerializeOld()
new Data { Person = new() { request = new() } },
new Data { Company = new() { request = new() } }
public static void Test(string xml)
var response = xml.LoadFromXml<Response>();
Console.WriteLine("Reserialized {0}:", response);
var newXml = response.GetXml();
Console.WriteLine(newXml);
static string GetOldXml() =>
<ns0:response xmlns:ns0='http://ws.gp.mnpartners.kz/services/bvu'>
<number>860517450246</number>
<birthDate>1986-05-17</birthDate>
<companyId>010940000162</companyId>
<fullName>SomeCompanyName</fullName>
static string GetNewXml() =>
<ns0:response xmlns:ns0='http://ws.gp.mnpartners.kz/services/bvu'>
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:person">
<number>860517450246</number>
<birthDate>1986-05-17</birthDate>
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:comapany">
<companyId>010940000162</companyId>
<fullName>SomeCompanyName</fullName>
public static class XmlSerializationHelper
public static T LoadFromXml<T>(this string xmlString, XmlSerializer serial = null)
serial = serial ?? new XmlSerializer(typeof(T));
using (var reader = new StringReader(xmlString))
return (T)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 ()).Add("", "");
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 static string GetOuterXml(this XmlNode node, bool indent = true)
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings
OmitXmlDeclaration = true,
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
return textWriter.ToString();
public static void Main()
Console.WriteLine("Environment version: {0} ({1}, {2})", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("Failed with unhandled exception: ");
public interface IPersonRequest
string Number { get; set; }
string Surname { get; set; }
string Name { get; set; }
string BirthDate { get; set; }
public interface ICompanyRequest
string CompanyId { get; set; }
string FullName { get; set; }