0

I have the following 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>

And the following C# classes:

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; }
}

I call the Serializer like this:

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);
}

However, I'm not getting the data in the Array for PreProcessors.

What do I have wrong in my configuration?

1 Answer 1

1

Found the issue. I was missing XmlArrayItem tag.

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; }
}
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.