@反序列化错误内部异常1:InvalidOperationException:不应预期<configuration xmlns =“”>。 C#

时间:2019-01-24 22:34:44

标签: c# xml deserialization

有人遇到反序列化错误

Inner Exception 1:InvalidOperationException: <configuration xmlns=''> was not expected
System.InvalidOperationException occurred
HResult=0x80131509
Message=There is an error in XML document (2, 2).
StackTrace:
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
在C#中打开和反序列化XML文件时

?这是使用System.Xml.Serialization和以下代码时的情况:

var serializer = new XmlSerializer(typeof(ExtractorTask));
using (var reader = System.IO.File.OpenText(args[0]))
  {
    extractorTask = (ExtractorTask)serializer.Deserialize(reader);
  }

可以使用System.Xml.Linq遍历相同的XML。

var doc = XDocument.Load(configFilePath);

这是XML文件的顶部:

<?xml version="1.0" encoding="utf-8"?>
<configuration LoaderConfig="disc42_loader_config_2014" Disc_Source="BigFix Inventory" >
<Custom Type="Pass-Through" Name="MU_HOST" Dynamic_subtype="Machine" Label="ILMT Server Details">
        <Fields>
        <Field Name="MachineID" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="1" FileColumnName="Key-MachineID:MachineID" />
        </Fields>
</Custom>

我看过帖子...有人建议将名称空间添加到XML文件,但在使用System.Xml.Serialization;时仍然会遇到相同的错误。其他人建议以编程方式将根节点添加到XML树中。那也不起作用。我想避免不得不重写使用system.Xml.Serialization方法的代码。

感谢您的帮助!

跟进:

我在以下示例中添加了ROOT:

XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "user";
// xRoot.Namespace = "http://www.cpandl.com";
xRoot.IsNullable = true;
XmlSerializer xs = new XmlSerializer(typeof(User),xRoot)

但这没用。

ExtractorTask类:

using System;
using System.IO;
using System.Text.RegularExpressions;

using System.Xml.Serialization;
namespace bdna.Extractor.DTO
public class ExtractorTask : ConfigObj
{
[XmlElement]
public ZipOutputRule ZipOutputRule { get; set; }
[XmlElement]
public SchemaRule SchemaRule { get; set; }
[XmlElement]
public DBAction DBAction { get; set; }
[XmlElement]
public FTPAction FTPAction { get; set; }
[XmlElement]
public XSFAction XSFAction { get; set; }
[XmlElement]
public RESTfulAPIAction RESTfulAPIAction { get; set; }
[XmlElement]
public ILMTRESTfulAPIAction ILMTRESTfulAPIAction { get; set; }
public TemplateAction TemplateAction { get; set; }

public ExtractorTask()
{
  ZipOutputRule = new ZipOutputRule();
  SchemaRule = new SchemaRule();
  DBAction = new DBAction();
  FTPAction = new FTPAction();
  XSFAction = new XSFAction();
  RESTfulAPIAction = new RESTfulAPIAction();
  TemplateAction = new TemplateAction();
  //cluster actions disabled by default
  this.DeepDisable();
}
}
}

完整的XML文件:

      <?xml version="1.0" encoding="utf-8"?>
  <configuration LoaderConfig="disc42_loader_config_2014" Disc_Source="BigFix Inventory" >

  <Custom Type="Pass-Through" Name="MU_HOST" Dynamic_subtype="Machine" Label="ILMT Server Details">
          <Fields>
          <Field Name="MachineID" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="1" FileColumnName="Key-MachineID:MachineID" />
          <Field Name="DataSource" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="DataSourceName" />
          <Field Name="ServerID" DataType="NVARCHAR(255)"   Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="ServerID" />
          <Field Name="PartitionCores" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="PartitionCores" />
          <Field Name="ClusterName" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="ClusterName" />
          <Field Name="ClusterID" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="ClusterID" />
          <Field Name="ServerCores" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="ServerCores" />
          <Field Name="PVUPerCore" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" Comment="" Key_Position="0" FileColumnName="PVUPerCore" />
          </Fields>
  </Custom>

  <Custom Type="Pass-Through_A">
          <Fields>
          <Field Name="DiscoveryStart" DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" /> 
          <Field Name="DiscoveryEnd"   DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" /> 
          <Field Name="ProductName"    DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" /> 
          <Field Name="Charged"        DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" /> 
          <Field Name="Excluded"       DataType="NVARCHAR(255)" Nullable="1" DefaultValue="" />
      </Fields>
  </Custom>

  <Authentication>
          <Field Name="Basic" Source="/api/get_token" Key="token" TimeOut="1000000" Destination=""/>
  </Authentication> 

  <Tables>
       <Table>
           <Name>System</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=host_name&amp;columns[]=dns_name" Key="computer_id" Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=host_name&amp;columns[]=dns_name" Key="host_name"   Destination="Name" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=host_name&amp;columns[]=dns_name" Key="dns_name"    Destination="Domain" />
        </Table>
        <Table>
           <Name>Pass-Through_A</Name>
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="computer_id"          Destination="ResourceID" />
           <Field Source="/api/sam/extended_software_facts?token={$}&amp;columns[]=computer_id&amp;columns[]=software_title_name&amp;columns[]=is_charged&amp;columns[]=is_excluded&amp;columns[]=discoverable_guid&amp;columns[]=component_id&amp;columns[]=is_current&amp;criteria={&quot;and&quot;:[[&quot;is_current&quot;,&quot;=&quot;,&quot;1&quot;]]}"     Key="component_id"         Destination="ProdID" />
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="catalog_dimension"    Destination="DisplayName" />
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="catalog_dimension"    Destination="Publisher" />
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="catalog_dimension"    Destination="Version" />
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="valid_from"           Destination="DiscoveryStart" />
           <Field Source="/api/sam/software_instances?token={$}&amp;columns[]=computer_id&amp;columns[]=valid_from&amp;columns[]=valid_to&amp;columns[]=catalog_dimension.software_title_name&amp;columns[]=catalog_dimension.publisher_name&amp;columns[]=catalog_dimension.version&amp;columns[]=discoverable_guid" Key="valid_to"             Destination="DiscoveryEnd" />
           <Field Source="/api/sam/extended_software_facts?token={$}&amp;columns[]=computer_id&amp;columns[]=software_title_name&amp;columns[]=is_charged&amp;columns[]=is_excluded&amp;columns[]=discoverable_guid&amp;columns[]=component_id&amp;columns[]=is_current&amp;criteria={&quot;and&quot;:[[&quot;is_current&quot;,&quot;=&quot;,&quot;1&quot;]]}"     Key="software_title_name"  Destination="ProductName" />
           <Field Source="/api/sam/extended_software_facts?token={$}&amp;columns[]=computer_id&amp;columns[]=software_title_name&amp;columns[]=is_charged&amp;columns[]=is_excluded&amp;columns[]=discoverable_guid&amp;columns[]=component_id&amp;columns[]=is_current&amp;criteria={&quot;and&quot;:[[&quot;is_current&quot;,&quot;=&quot;,&quot;1&quot;]]}"     Key="is_charged"           Destination="Charged" />
           <Field Source="/api/sam/extended_software_facts?token={$}&amp;columns[]=computer_id&amp;columns[]=software_title_name&amp;columns[]=is_charged&amp;columns[]=is_excluded&amp;columns[]=discoverable_guid&amp;columns[]=component_id&amp;columns[]=is_current&amp;criteria={&quot;and&quot;:[[&quot;is_current&quot;,&quot;=&quot;,&quot;1&quot;]]}"     Key="is_excluded"          Destination="Excluded" />
      </Table>
        <Table>
           <Name>GS_OPERATING_SYSTEM</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=os" Key="computer_id" Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=os" Key="os"          Destination="Caption0" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=os" Key="os"          Destination="Name0" />
        </Table>
        <Table>
           <Name>GS_PROCESSOR</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=processor_vendor&amp;columns[]=processor_brand_string" Key="computer_id"             Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=processor_vendor&amp;columns[]=processor_brand_string" Key="processor_vendor"        Destination="Manufacturer0" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=processor_vendor&amp;columns[]=processor_brand_string" Key="processor_brand_string"  Destination="Name0" />
        </Table>
        <Table>
           <Name>GS_COMPUTER_SYSTEM</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_model&amp;columns[]=server_processors" Key="computer_id"               Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_model&amp;columns[]=server_processors" Key="hardware_manufacturer"     Destination="Manufacturer0" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_model&amp;columns[]=server_processors" Key="hardware_model"            Destination="Model0" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_model&amp;columns[]=server_processors" Key="server_processors"         Destination="NumberofProcessors0" />
        </Table>
        <Table>
           <Name>GS_WORKSTATION_STATUS</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=last_seen" Key="computer_id"   Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=last_seen" Key="last_seen"     Destination="LastHWScan" />
        </Table>
        <Table>
           <Name>GS_PC_BIOS</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_serial_number" Key="computer_id"               Destination="ResourceID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_serial_number" Key="hardware_manufacturer"     Destination="Manufacturer0" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=hardware_manufacturer&amp;columns[]=hardware_serial_number" Key="hardware_serial_number"    Destination="SerialNumber0" />
        </Table>
        <Table> 
           <Name>Pass-Through</Name>
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="computer_id"         Destination="Key-MachineID:MachineID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="datasource_name"     Destination="DataSourceName" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="server_id"           Destination="ServerID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="partition_cores"     Destination="PartitionCores" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="cluster_id"          Destination="ClusterID" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="server_cores"        Destination="ServerCores" />
           <Field Source="/api/sam/computer_systems?token={$}&amp;columns[]=computer_id&amp;columns[]=datasource_name&amp;columns[]=server_id&amp;columns[]=partition_cores&amp;columns[]=cluster_id&amp;columns[]=server_cores&amp;columns[]=pvu_per_core" Key="pvu_per_core"        Destination="PVUPerCore" />
        </Table>
        <Table>
        <Name>AddRemove</Name>
        <Field Source="/api/sam/packages.json?token={$}&amp;columns[]=computer_id&amp;columns[]=version&amp;columns[]=name&amp;columns[]=vendor" Key="computer_id" Destination="ResourceID" />
        <Field Source="/api/sam/packages.json?token={$}&amp;columns[]=computer_id&amp;columns[]=version&amp;columns[]=name&amp;columns[]=vendor" Key="name" Destination="DisplayName" />
        <Field Source="/api/sam/packages.json?token={$}&amp;columns[]=computer_id&amp;columns[]=version&amp;columns[]=name&amp;columns[]=vendor" Key="vendor" Destination="Publisher" />
        <Field Source="/api/sam/packages.json?token={$}&amp;columns[]=computer_id&amp;columns[]=version&amp;columns[]=name&amp;columns[]=vendor" Key="version" Destination="Version" />
      </Table>


  </Tables>
  </configuration>

@ProgMan-这是ConfigObj抽象类:

using System.Xml.Serialization;
using bdna.Extractor.I18N;

namespace bdna.Extractor.DTO
{
public abstract class ConfigObj
{
[XmlAttribute]
public string Enabled;

[XmlIgnore]
public bool IsEnabled
{
  get { return string.IsNullOrEmpty(Enabled) || Enabled=="1"; }
  set { Enabled = value?"1":"0"; }
}

public void DeepCopyEnableValue()
{
  foreach (var prop in this.GetType().GetProperties().Where(p => 
  p.PropertyType.IsSubclassOf(typeof(ConfigObj))))
  {
    var enableable = (ConfigObj)new 
    bdna.Extractor.Util.GeneralResAdapter.FastProperty(prop).Get(this);
    if (enableable==null)
    {
      continue;
    }

    enableable.IsEnabled = IsEnabled;
    enableable.DeepCopyEnableValue();
  }
}

public void DeepDisable()
{
  this.IsEnabled = false;
  this.DeepCopyEnableValue();
}
}
}

0 个答案:

没有答案