using System.Runtime.Serialization;
static void Main(string[] args)
var serializer = new DataContractXmlSerializer<Model>();
var xml = "<Model><Id>5</Id></Model>";
var model = serializer.Deserialize(xml);
Console.WriteLine($"model.Id = {model.Id}");
var newXml = serializer.Serialize(model);
Console.WriteLine($"newXml = \"{newXml}\"");
public class DataContractXmlSerializer<T>
private readonly DataContractSerializer _dataContractSerializer;
public DataContractXmlSerializer()
_ = Attribute.GetCustomAttribute(typeof(T), typeof(DataContractAttribute))
?? throw new InvalidOperationException($"Type {typeof(T)} does not contain Attribute of type {typeof(DataContractAttribute)}.");
_dataContractSerializer = new DataContractSerializer(typeof(T));
public T Deserialize(string xml)
var xmlData = Encoding.UTF8.GetBytes(xml);
var xmlStream = new MemoryStream(xmlData);
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(xmlStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null))
return (T)_dataContractSerializer.ReadObject(reader);
public string Serialize(T obj)
using (MemoryStream memoryStream = new MemoryStream())
_dataContractSerializer.WriteObject(memoryStream, obj);
return Encoding.UTF8.GetString(memoryStream.ToArray());
[DataContract(Namespace="")]
public int Id { get { return this._id; } }