我正在C#中对一个对象进行序列化和反序列化,它在我的机器上完美运行。但是,在客户计算机上会抛出以下错误:
无法反序列化S:\ PriceList.xml
系统返回消息:
第20行位置19的错误。不期望命名空间“http://schemas.datacontract.org/2004/07/MyCompany.MyModule”中的'EndElement''ConditionalDataSetter'。期待元素'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>
我无法理解这一点 - 机器之间肯定存在一些差异,但找到它的地点和位置?在尝试寻找解决方案时,我已完成以下工作:
对此提出任何建议或建议将非常感激。
答案 0 :(得分:0)
这个结果非常简单 - 过度活跃的代码混淆是原因。客户机器上的发布版本已经到位,这已经影响了属性名称,因此导致了问题。
我通过故意将一个未受保护的dll副本加载到客户的机器上来证明了这一点,之后它完全符合预期。
我面前的选项现在是:
感谢jdweng的回复,这有助于我在寻找答案时集中思考。