c# — Сериализация DataContract — Базовые классы, наследование и переопределение

Всем доброго времени суток,

Я независимый разработчик игр, который в прошлом в основном работал с 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] базового класса?

8
задан Nathan Runge 20 June 2012 в 09:13
поделиться