C# DataContractSerializer在项目A上工作,但在同一台机器上的项目B上失败。为什么?

C# DataContractSerializer在项目A上工作,但在同一台机器上的项目B上失败。为什么?,c#,datacontractserializer,C#,Datacontractserializer,我有一个调用DataContractSerializer的库。我已经在ConsoleApp和Windows服务应用程序中使用它好几个月了。它们都是在Visual Studio 2015中创建的 本周,我创建了一个新的Win Forms应用程序(在visual studio 2017中),并使用了该.dll代码。相同的代码、相同的类、相同的文件-两个旧项目仍然有效,新项目抛出此错误 注意:我没有使用app.config,因此与该主题相关的所有现有帖子都不适用。此外,我的文件中没有configSec

我有一个调用DataContractSerializer的库。我已经在ConsoleApp和Windows服务应用程序中使用它好几个月了。它们都是在Visual Studio 2015中创建的

本周,我创建了一个新的Win Forms应用程序(在visual studio 2017中),并使用了该.dll代码。相同的代码、相同的类、相同的文件-两个旧项目仍然有效,新项目抛出此错误

注意:我没有使用app.config,因此与该主题相关的所有现有帖子都不适用。此外,我的文件中没有configSections或configuation节点,因此这些答案不适用

{System.Configuration.ConfigurationErrorsException:配置 系统初始化失败---> System.Configuration.ConfigurationErrorsException:仅一个 每个配置文件允许的元素,如果存在,则必须 是根元素的第一个子元素

机器配置是一样的,因为它们都在我的机器上运行。所以,我不知道它可能是什么。有什么想法吗

在我现有的2个项目中正常工作的文件开始于:

编辑

工作应用程序的配置文件


非工作应用程序的配置文件


根据下面的注释和错误文本,“startup”标记必须移动到“configurations”标记之后。我不理解为什么仅针对DataContract序列化引发此错误,但事实就是如此。

根据文档

configSections元素位于配置文件中,configSections元素必须是配置元素的第一个子元素


由于配置文件是可配置的(您可以添加许多节和自定义节),序列化程序需要能够理解这些配置节,这是第一个要求删除诸如在定义节处理程序之前使用节之类的问题。

请包含每个应用程序的配置文件。@mjwills您很明智。
> <SettingsModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="http://schemas.datacontract.org/2004/07/Model">   <SettingsList
> xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
>     <d2p1:KeyValueOfstringSettingsOFv3k_StQ>
 using (Stream stream = new MemoryStream())
 {
     byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
     stream.Write(data, 0, data.Length);
     stream.Position = 0;
     DataContractSerializer deserializer = new DataContractSerializer(typeof(GatewaySettingsModel));
     return deserializer.ReadObject(stream) as GatewaySettingsModel;
  }
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
  <appSettings>
    <add key="DataOption" value="5" />
  </appSettings>
  <entityFramework>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="..." connectionString="..." />
    <add name="..." connectionString="..." providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>