XMLSerializer для массива объектов - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть следующий XML:

<SQLToData>
  <PreProcessors>
    <PreProcessor>
      <Name>Input1</Name>
      <Expression>1 == a</Expression>
    </PreProcessor>
  </PreProcessors>
  <DataSource>
    <Type>SQLServer</Type>
    <ConnectionString>Data Source=****</ConnectionString>
  </DataSource>
  <SQL>
    SELECT * FROM TABLE
  </SQL>
  <ReturnType>DataTable</ReturnType>
</SQLToData>

И следующие классы C #:

public class SQLToData
{
    public SQLToDataDataSource DataSource { get; set; }
    [XmlArray("PreProcessors")]
    public SQLToDataPreProcessor[] PreProcessors { get; set; }
    public string SQL { get; set; }
    public string ReturnType { get; set; }
}

[XmlRoot("DataSource")]
public class SQLToDataDataSource
{
    public string Type { get; set; }
    public string ConnectionString { get; set; }
}

[XmlRoot("PreProcessor")]
public class SQLToDataPreProcessor
{
    public string Name { get; set; }
    public string Expression { get; set; }
}

Я называю Сериализатор следующим образом:

XDocument xml = XDocument.Load(xmlPath);

XmlSerializer inputSerializer = new XmlSerializer(typeof(SQLToData));
XElement xmlElement = xml.XPathSelectElement("/SQLToData");

SQLToData config;
using (TextReader reader = new StringReader(xmlElement.ToString()))
{
    config = (SQLToData)inputSerializer.Deserialize(reader);
}

Однако я не получаю данные в массиве для PreProcessors.

Что у меня не так в моей конфигурации?

1 Ответ

1 голос
/ 10 апреля 2019

Нашел проблему. Мне не хватало тега XmlArrayItem.

public class SQLToData
{
    public SQLToDataDataSource DataSource { get; set; }
    [XmlArray("PreProcessors")]
    [XmlArrayItem("PreProcessor")]
    public SQLToDataPreProcessor[] PreProcessors { get; set; }
    public string SQL { get; set; }
    public string ReturnType { get; set; }
}
...