Как сериализовать в XML несколько объектов по этому сценарию? - PullRequest
1 голос
/ 02 апреля 2012

Мне тяжело с моим дизайном в сериализации объектов.

Позвольте мне показать вам мой сценарий.У меня есть общий класс Configuration, и он содержит три свойства:

public sealed class Configuration
{
    public Configuration(string name, Levels level, ConfigurationSpec spec)
    {
        this.Name = name;
        this.Level = level;
        this.Spec = spec;
    }
    public string Name { get; set; }
    public Levels Level { get; set; }
    public ConfigurationSpec Spec { get; set; }
}

Последнее свойство не имеет значения, потому что это абстрактный класс, и он может быть производным от других классов:

public class ConfigurationSpec { }
public class BinaryConfiguration : ConfigurationSpec
{
    public Range<int> Range1 { get; set; }
    public Range<int> Range2 { get; set; }

    public BinaryConfiguration()
    {
        this.Range1 = new Range<int>();
        this.Range2 = new Range<int>();
    }

    public BinaryConfiguration(Range<int> range1, Range<int> range2)
    {
        this.Range1 = range1;
        this.Range2 = range2;
    }
}

public class Range<T> where T : IComparable<T>
{
    private T _min;
    private T _max;

    public Range()
    {
    }

    public Range(T min, T max)
    {
        this.Min = min;
        this.Max = max;
    }

    public T Min
    {
        get { return _min; }
        set { _min = value; }
    }

    public T Max
    {
        get { return _max; }
        set { _max = value; }
    }

Все это содержит класс ConfigurationSpec.И настоящая проблема в том, что я собираюсь добавить множество Specs, полученных из ConfigurationSpec, я имею в виду сотни.

<Configuration>
    <!-- Maybe here it'll be good specify the type -->
    <ConfigurationSpec>
        <Range1 X="2" Y="4" />
        <Range2 X="5" Y="10" />
    </ConfigurationSpec>
</Configuration>

И я хочу знать, как я могу написать и прочитать все эти классы изXmlFile для сериализации.

Если у вас есть какие-либо сомнения, пожалуйста, дайте мне знать

1 Ответ

2 голосов
/ 02 апреля 2012

Пока ваш класс Configuration имеет ссылку на ConfigurationSpec, он будет правильно сериализовать / десериализовать весь необходимый объект.

Говоря о ConfigurationSpec только о типе, на который ссылается Configuration будет сериализовано (при сериализации экземпляра Configuration).Другими словами, если вы получили 5 различных ConfigurationSpec, то только тот, который вы передадите конструктору Configuration, будет сериализован

...