Мне пришлось написать собственный десериализатор, потому что XmlSerializer и DataContractSerializer не подходят для моих нужд. Итак, вот основа моей десериализатор:Deserializing using XElement
static BaseElement ParseXml(XElement element)
{
var e = (Element)Activator.CreateInstance(Type.GetType("Elements." + element.Name));
foreach (var attr in element.Attributes())
{
var property = e.GetType().GetProperty(attr.Name.LocalName);
property.SetValue(e, Convert.ChangeType(attr.Value, property.PropertyType), null);
}
foreach (var x in element.Elements())
e.Elements.Add(ParseXml(x));
return e;
}
Класс BaseElement:
public abstract class BaseElement
{
public BaseElement()
{
Elements = new List<Element>();
}
public IList<Element> Elements
{
get;
set;
}
}
Единственным ограничением является то, что я не могу быть пользовательские атрибуты набраны, потому что я не могу преобразовать пользовательские типы используя Convert.ChangeType. Любые идеи о том, как это решить?
Спасибо.