Подскажите, пожалуйста, в следующей ситуации.
Использую Bltoolkit, достаю данные с помощью DataAccessor. Хочу сериализовать полученные объекты с помощью DataContractSerializer.
К примеру, такая модель:
[BLTDataContract]
public abstract class Person
{
public abstract int Id { get; set; }
public abstract DateTime Created { get; set; }
[MapField("Identity{0}")]
public Identity Identity { get; set; }
}
[BLTDataContract]
public abstract class Identity
{
public abstract string Name { get; set; }
public abstract Gender Gender { get; set; }
}
,где
public class BLTDataContractAttribute : GenerateAttributeAttribute
{
public BLTDataContractAttribute()
: base(typeof(DataContractAttribute))
{
}
}
Пытаемся сделать следующее
public void DataContractInPersonObjectGenerateTest()
{
Person person = TypeAccessor<Person>.CreateInstance();
person.Id = 1;
person.DateCreated = DateTime.Now;
var type=person.GetType();
DataContractAttribute attr = (DataContractAttribute)
Attribute.GetCustomAttribute(type, typeof(DataContractAttribute));
Assert.NotNull(attr); // Ok!
var fileName = "testPerson.xml";
var settings = new XmlWriterSettings() { Indent = true };
using (var writer = XmlWriter.Create(fileName, settings))
{
var sr = new DataContractSerializer(type);
sr.WriteObject(writer, person); // Error!
}
Assert.True(File.Exists(fileName));
}
В результате InvalidDataContractException {"Type 'BLToolkitExtension.Person' cannot inherit from a type that is not marked with DataContractAttribute or SerializableAttribute. Consider marking the base type 'ConsoleApplication5.Person' with DataContractAttribute or SerializableAttribute, or removing them from the derived type}
Хотя DataContractAttribute извлекся из сгенеренного типа.
Подскажите, пожалуйста, что делать в этой ситуации?
P.S. В коде опустил использование обертки для DataMemberAttribute.