2012-04-02 36 views
1

我在設計序列化對象時遇到了困難。如何在這種情況下在Xml中序列化多個對象?

讓我給你看看我的場景。我有一個普通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類。而真正的問題是,我要添加很多來自ConfigurationSpecSpecs,我的意思是數百個。

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

而且我想知道我怎麼能寫,並從該序列化XMLFILE閱讀所有這些類。

如果您有任何疑問,請讓我知道

回答

2

只要你Configuration類有到ConfigurationSpec它將正確序列參考/反序列化需要他們的所有對象。

說到ConfigurationSpec只有Configuration引用的類型纔會被序列化(當您序列化Configuration的實例時)。 換句話說,如果你有5個不同的ConfigurationSpec只有你將傳遞給Configuration構造函數的一個將被序列化

+0

如果可以用樣本說明我嗎? – 2012-04-02 17:48:02

+0

另一個疑問,正如你可以在我的情況看到的,最好是從Linq – 2012-04-02 17:57:32

+0

序列化XmlSerialization或XDocument,你可以使用XmlSerialization, – 2012-04-02 18:10:54