У меня возникла проблема с правильной сериализацией объекта. У меня есть объект SensorSession, который выглядит так:
[XmlRoot("Session")]
public class SensorSession
{
[XmlElement("SensorDefinitionCollection")]
public SensorDefinitionCollection mCollection { get; set; }
[XmlElement("SensorRunner")]
public SensorRunner mRunner { set; get; }
}
public class SensorDefinitionCollection : IEnumerable<SensorDefinition>
{
[XmlArray("SensorDefinitionCollection")]
[XmlArrayItem("SensorDefinition")]
public List<SensorDefinition> mCollection;
}
public class SensorDefinition : IEquatable<SensorDefinition>, IComparable<SensorDefinition>
{
[XmlElement("StartingWavelength")]
public double startingWavelength { get; set; }
[XmlElement("StoppingWavelength")]
public double stoppingWavelength { get; set; }
[XmlElement("TargetWavelength")]
public double targetWavelength { get; set; }
}
Когда я сериализуюсь, я получаю следующее:
<?xml version="1.0" encoding="utf-8"?>
<Session xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SensorDefinitionCollection>
<StartingWavelength>1300</StartingWavelength>
<StoppingWavelength>1400</StoppingWavelength>
<TargetWavelength>1350</TargetWavelength>
</SensorDefinitionCollection>
<SensorDefinitionCollection>
<StartingWavelength>1200</StartingWavelength>
<StoppingWavelength>1300</StoppingWavelength>
<TargetWavelength>1250</TargetWavelength>
</SensorDefinitionCollection>
<SensorRunner>
<SensorConfig>
<SampleCount>5</SampleCount>
<SampleDelay>5</SampleDelay>
<SampleTolerance>5</SampleTolerance>
</SensorConfig>
</SensorRunner>
</Session>
Но то, что я ожидаю получить, это:
<?xml version="1.0" encoding="utf-8"?>
<Session xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SensorDefinitionCollection>
<SensorDefinition>
<StartingWavelength>1200</StartingWavelength>
<StoppingWavelength>1300</StoppingWavelength>
<TargetWavelength>1250</TargetWavelength>
</SensorDefinition>
</SensorDefinitionCollection>
<SensorRunner>
<SensorConfig>
<SampleCount>5</SampleCount>
<SampleDelay>5</SampleDelay>
<SampleTolerance>5</SampleTolerance>
</SensorConfig>
</SensorRunner>
</Session>
Как мне разрешить, чтобы список (SensorDefinitionCollection) стал единым элементом, и все SensorDefinitions в этом списке попадали внутрь?
UPDATE:
Проблема была решена с небольшим рефакторингом. Вместо того чтобы объект коллекции содержал список, этот объект наследует List с объектами определения.
[XmlRoot("Session")]
public class SensorSession
{
[XmlArray("SensorDefinitionCollection")]
[XmlArrayItem("SensorDefinition")]
public SensorDefinitionCollection Collection { get; set; }
[XmlElement("SensorRunner")]
public SensorRunner mRunner { set; get; }
}
[Serializable()]
public class SensorDefinitionCollection : List<SensorDefinition>
{
}
public class SensorDefinition : IEquatable<SensorDefinition>, IComparable<SensorDefinition>
{
[XmlElement("StartingWavelength")]
public double startingWavelength { get; set; }
[XmlElement("StoppingWavelength")]
public double stoppingWavelength { get; set; }
[XmlElement("TargetWavelength")]
public double targetWavelength { get; set; }
}