2016-08-22 4 views
0

私はC#でオブジェクトをシリアライズしてデシリアライズしています。しかし、顧客のマシン上で、次のエラーがスローされます。ここでは逆シリアル化は私のPC上では動作しますが、別のマシンでは失敗します

Unable to deserialize the S:\PriceList.xml

The system returned the message:

Error in line 20 position 19. 'EndElement' 'ConditionalDataSetter' from namespace ' http://schemas.datacontract.org/2004/07/MyCompany.MyModule ' is not expected. Expecting element 'Xb45L0rsD'.

は、XMLは次のとおりです。

<?xml version="1.0" encoding="utf-16"?> 
<DataImportConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyCompany.MyModule"> 
    <Comment>59</Comment> 
    <Delimiter>44</Delimiter> 
    <DisplayType>Round</DisplayType> 
    <Escape>34</Escape> 
    <ForwardOnly>false</ForwardOnly> 
    <HasHeaders>true</HasHeaders> 
    <IgnoreEmptyValues>true</IgnoreEmptyValues> 
    <ImportDataDescription>Price List Data</ImportDataDescription> 
    <ImportDataFileName></ImportDataFileName> 
    <ImportDataType>MappedCSV</ImportDataType> 
    <Passes> 
     <DataImportPass z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> 
      <ConditionalSetters> 
       <ConditionalDataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>EnteredBy</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Condition_x003E_k__BackingField>RecordDoesNotExist</_x003C_Condition_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>AutoImported</_x003C_Value_x003E_k__BackingField> 
       </ConditionalDataSetter> 
       <ConditionalDataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>EnteredOn</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Condition_x003E_k__BackingField>RecordDoesNotExist</_x003C_Condition_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>GetDate() </_x003C_Value_x003E_k__BackingField> 
       </ConditionalDataSetter> 
       <ConditionalDataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>LastModifiedBy</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Condition_x003E_k__BackingField>RecordAlreadyExists</_x003C_Condition_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>AutoImported</_x003C_Value_x003E_k__BackingField> 
       </ConditionalDataSetter> 
       <ConditionalDataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>LastModifiedOn</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Condition_x003E_k__BackingField>RecordAlreadyExists</_x003C_Condition_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>GetDate() </_x003C_Value_x003E_k__BackingField> 
       </ConditionalDataSetter> 
      </ConditionalSetters> 
      <ListTypeId>14</ListTypeId> 
      <LookupSetters /> 
      <Mappings> 
       <DataMapping> 
        <_sourceAttemptsList> 
         <SourceAttempt> 
          <_x003C_SourceNames_x003E_k__BackingField  xmlns:d8p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
           <d8p1:string>Part No.</d8p1:string> 
          </_x003C_SourceNames_x003E_k__BackingField> 
         </SourceAttempt> 
        </_sourceAttemptsList> 
        <_x003C_DefaultValue_x003E_k__BackingField> </_x003C_DefaultValue_x003E_k__BackingField> 
        <_x003C_Precision_x003E_k__BackingField>Optional</_x003C_Precision_x003E_k__BackingField> 
        <_x003C_Separator_x003E_k__BackingField>  </_x003C_Separator_x003E_k__BackingField> 
        <_x003C_TargetName_x003E_k__BackingField>ItemCode</_x003C_TargetName_x003E_k__BackingField> 
       </DataMapping> 
       <DataMapping> 
        <_sourceAttemptsList> 
         <SourceAttempt> 
          <_x003C_SourceNames_x003E_k__BackingField  xmlns:d8p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
           <d8p1:string>Order Code</d8p1:string> 
          </_x003C_SourceNames_x003E_k__BackingField> 
         </SourceAttempt> 
        </_sourceAttemptsList> 
        <_x003C_DefaultValue_x003E_k__BackingField> </_x003C_DefaultValue_x003E_k__BackingField> 
        <_x003C_Precision_x003E_k__BackingField>Optional</_x003C_Precision_x003E_k__BackingField> 
        <_x003C_Separator_x003E_k__BackingField>  </_x003C_Separator_x003E_k__BackingField> 
        <_x003C_TargetName_x003E_k__BackingField>Barcode</_x003C_TargetName_x003E_k__BackingField> 
       </DataMapping> 
       <DataMapping> 
        <_sourceAttemptsList> 
         <SourceAttempt> 
          <_x003C_SourceNames_x003E_k__BackingField  xmlns:d8p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
           <d8p1:string>Description</d8p1:string> 
          </_x003C_SourceNames_x003E_k__BackingField> 
         </SourceAttempt> 
        </_sourceAttemptsList> 
        <_x003C_DefaultValue_x003E_k__BackingField> </_x003C_DefaultValue_x003E_k__BackingField> 
        <_x003C_Precision_x003E_k__BackingField>Optional</_x003C_Precision_x003E_k__BackingField> 
       <_x003C_Separator_x003E_k__BackingField>  </_x003C_Separator_x003E_k__BackingField> 
        <_x003C_TargetName_x003E_k__BackingField>SalesDescription</_x003C_TargetName_x003E_k__BackingField> 
       </DataMapping> 
       <DataMapping> 
        <_sourceAttemptsList> 
         <SourceAttempt> 
          <_x003C_SourceNames_x003E_k__BackingField xmlns:d8p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
           <d8p1:string>Sale Price</d8p1:string> 
          </_x003C_SourceNames_x003E_k__BackingField> 
         </SourceAttempt> 
        </_sourceAttemptsList> 
        <_x003C_DefaultValue_x003E_k__BackingField> </_x003C_DefaultValue_x003E_k__BackingField> 
        <_x003C_Precision_x003E_k__BackingField>Optional</_x003C_Precision_x003E_k__BackingField> 
        <_x003C_Separator_x003E_k__BackingField>  </_x003C_Separator_x003E_k__BackingField> 
        <_x003C_TargetName_x003E_k__BackingField>SalePrice</_x003C_TargetName_x003E_k__BackingField> 
       </DataMapping> 
      </Mappings> 
      <Name>Items</Name> 
      <Parent i:nil="true" /> 
      <Passes /> 
      <Precision>Required</Precision> 
      <Setters> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>AssetAccountId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>6</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>COGSAccountId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>9</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>ItemClassificationId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>2</_x003C_Value_x003E_k__BackingField> 
      </DataSetter> 
      <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>ItemGroupId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>-1</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>Keywords</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField> </_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>NormalTaxCodeId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>2</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>SalesAccountId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>22</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
       <DataSetter> 
        <_x003C_ColumnName_x003E_k__BackingField>UnitOfMeasureId</_x003C_ColumnName_x003E_k__BackingField> 
        <_x003C_Value_x003E_k__BackingField>1</_x003C_Value_x003E_k__BackingField> 
       </DataSetter> 
      </Setters> 
     </DataImportPass> 
    </Passes> 
    <PreserveSpaces>false</PreserveSpaces> 
    <ProgressUnitType>CountOfTotal</ProgressUnitType> 
    <Quote>34</Quote> 
</DataImportConfiguration> 

私はこれを理解するために途方に暮れています - マシンの間にいくつかの違いがなければならないが、何をどこで見つけるのですか?

  • は、アプリケーションやモジュールのバージョン問題
  • がないことを確認するためにチェック.NETバージョンに問題がないことを確認するためにチェック:私は解決策を見つけるために私の試みで次のように行っています
  • はUTF-16を試してみました代わりに、UTF-8(私が知っている、ストローでクラッチ!)
  • は、この上の任意の提案やアドバイスが非常に高く評価されるだろう、名前空間

をいじってみました。

+0

メモ帳でファイルを開きます。次にSaveAsを実行し、両方のマシンでファイルのエンコーディングをチェックします。メモ帳には、ANSI、UTF-8、Unicodeのオプションがあります。 – jdweng

+0

残念ながら、それは違いはありませんでした。その他の提案はありますか? – oldcoder

+0

どのエンコーディングが良いマシンで動作しましたか。 – jdweng

答えて

0

これは本当にシンプルであることが判明しました。過剰なコードの難読化が原因でした。カスタマーマシンのリリースバージョンでは、プロパティ名に影響を与えていたため、問題を引き起こしていました。

これは、意図的にdllの保護されていないコピーを顧客のマシンに読み込んだ後、すべてが期待どおりに実行されたことで証明されました。私の目の前で

オプションは次のようになります。

  1. 変更難読化が
  2. は前
  3. 難読化
  4. XMLファイルを作成する私ができる何かを難読化しないことを決定設定します...

私は答えを探していたので、私の考えを集中するのに役立った応答のためにjdwengに感謝します。

関連する問題