Всем доброго времени суток,
Я независимый разработчик игр, который в прошлом в основном работал с XNA, а с другой стороны , коммерческие наборы инструментов. Однако охват XNA довольно ограничен, и я создаю кроссплатформенный уровень абстракции для нескольких платформ.
Короче говоря, мне нужна сериализация xml, доступная более широко, чем [Serializable], и мне указали на контракты данных. Я провел много исследований, но не могу найти никакой хорошей информации о некоторых основах системы, касающихся наследования и переопределений.
Суть моего вопроса в том, что...
[DataContract]
public class Node
{
private string name;
public string Name { get { return name; } set { name = value; } }
public virtual float Rotation { get { return 0f; } set { } }
}
[DataContract]
public class FancyNode : Node
{
private float rotation;
public override float Rotation { get { return rotation; } set { rotation = value; } }
}
Если я сериализую «FancyNode», будет ли правильно сериализован «Rotation» и будет ли сериализован «Name»?
Дополнительный вопрос: Я хотел спросить раньше, но не мог вспомнить в то время. Как обработчик сериализатора переопределяет свойства [IgnoreDataMember]? Например...
[DataContract]
public class Simple
{
[IgnoreDataMember]
public virtual string Value { get { return ""; } set { } }
}
[DataContract]
public class Complex : Simple
{
private string value;
public override string Value { get { return value; } set { this.value = value; } }
}
Будет ли 'Value' в 'Complex' сериализован? Некоторые ответы предполагают, что если теги [DataMember] не используются, все свойства будут сериализованы. Если да, имеет ли значение атрибут [IgnoreDataMember] базового класса?