用于对象数组的XMLSerializer

时间:2019-04-10 14:27:22

标签: c# xml xml-serialization

我有以下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 个答案:

答案 0 :(得分:1)

发现了问题。我缺少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; }
}