通常,所有这些工作对于将我的对象序列化为一个Xml字符串并返回到一个对象中都很有用。但是,我在不同的最终用户之间出现了我似乎无法跟踪的不一致情况。Xml序列化顺序问题
基本上,当我序列化一个对象,它看起来像这样一次转换为XML:
<?xml version="1.0" encoding="utf-8"?>
<Step xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Step 2</Name>
<VoltageDip>20</VoltageDip>
<Loads>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>400 Volt 3 Phase 12w 50Hz</Name>
<V3Id xsi:nil="true" />
<Value>400</Value>
<V3Value>415</V3Value>
<Connection>Wye</Connection>
<Phase>3</Phase>
<RangeDescription>231/400v</RangeDescription>
<VoltageCode>F</VoltageCode>
<Active>true</Active>
<Frequency>50</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>false</UL2200>
<Default>false</Default>
<TempRiseIds>
<TempRiseId>F</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>400 Volt 3 Phase 12w 50Hz</Name>
<V3Id xsi:nil="true" />
<Value>400</Value>
<V3Value>415</V3Value>
<Connection>Wye</Connection>
<Phase>3</Phase>
<RangeDescription>231/400v</RangeDescription>
<VoltageCode>F</VoltageCode>
<Active>true</Active>
<Frequency>50</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>false</UL2200>
<Default>false</Default>
<TempRiseIds>
<TempRiseId>F</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>400 Volt 3 Phase 12w 50Hz</Name>
<V3Id xsi:nil="true" />
<Value>400</Value>
<V3Value>415</V3Value>
<Connection>Wye</Connection>
<Phase>3</Phase>
<RangeDescription>231/400v</RangeDescription>
<VoltageCode>F</VoltageCode>
<Active>true</Active>
<Frequency>50</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>false</UL2200>
<Default>false</Default>
<TempRiseIds>
<TempRiseId>F</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
</Loads>
</Step>
然而,当其他随机用户运行了一个程序,他们序列化对象,他们最终与此相反:
<?xml version="1.0" encoding="utf-8"?>
<Step xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Step 2</Name>
<Loads>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>240 Volt 3 Phase 12w 60Hz</Name>
<RangeDescription>120/240v</RangeDescription>
<V3Id>3</V3Id>
<Value>240</Value>
<V3Value>480</V3Value>
<Connection>Delta</Connection>
<Phase>3</Phase>
<VoltageCode>J</VoltageCode>
<Active>true</Active>
<Frequency>60</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>true</UL2200>
<Default>true</Default>
<TempRiseIds>
<TempRiseId>B</TempRiseId>
<TempRiseId>C</TempRiseId>
<TempRiseId>D</TempRiseId>
<TempRiseId>E</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>240 Volt 3 Phase 12w 60Hz</Name>
<RangeDescription>120/240v</RangeDescription>
<V3Id>3</V3Id>
<Value>240</Value>
<V3Value>480</V3Value>
<Connection>Delta</Connection>
<Phase>3</Phase>
<VoltageCode>J</VoltageCode>
<Active>true</Active>
<Frequency>60</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>true</UL2200>
<Default>true</Default>
<TempRiseIds>
<TempRiseId>B</TempRiseId>
<TempRiseId>C</TempRiseId>
<TempRiseId>D</TempRiseId>
<TempRiseId>E</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
<Load xsi:type="ThreePhaseMotorLoad">
<Name>Motor 450 KW Pump</Name>
<Comments />
<Quantity>1</Quantity>
<Voltage>
<Name>240 Volt 3 Phase 12w 60Hz</Name>
<RangeDescription>120/240v</RangeDescription>
<V3Id>3</V3Id>
<Value>240</Value>
<V3Value>480</V3Value>
<Connection>Delta</Connection>
<Phase>3</Phase>
<VoltageCode>J</VoltageCode>
<Active>true</Active>
<Frequency>60</Frequency>
<PowerFactor>0.8000</PowerFactor>
<UL2200>true</UL2200>
<Default>true</Default>
<TempRiseIds>
<TempRiseId>B</TempRiseId>
<TempRiseId>C</TempRiseId>
<TempRiseId>D</TempRiseId>
<TempRiseId>E</TempRiseId>
</TempRiseIds>
</Voltage>
<IsNonLinear>true</IsNonLinear>
<PriorityProperty>KWm</PriorityProperty>
<KW>0</KW>
<RunningPowerFactor xsi:nil="true" />
<StartingPowerFactor>0.90</StartingPowerFactor>
<KWm>450</KWm>
<Efficiency xsi:nil="true" />
<IsLowInertia>false</IsLowInertia>
<MotorStandard>NEMA</MotorStandard>
<MotorStartingMethod>VariableFrequencyDrive</MotorStartingMethod>
<NEMAMotorCode>F</NEMAMotorCode>
<SolidStateStarterPercent>0</SolidStateStarterPercent>
<LockedRotorKVAPerHP>5.3</LockedRotorKVAPerHP>
</Load>
</Loads>
<VoltageDip>20</VoltageDip>
</Step>
你会发现,它是在VoltageDip和负载在不同的顺序不同。所以它似乎不符合模式中设置的序列。在用户反序列化Xml字符串后会发生什么情况,Name,Load和VoltageDip属性是否设置为其默认值(对于引用类型和字符串为null,对于int为0),而不是在序列化过程中保存的值。
使用该应用程序的每个人都使用相同的源代码。
谁能告诉我发生了什么?为什么不同用户/机器之间的序列化元素顺序会改变?为什么反序列化过程在发生时无法处理?
大柏林墙。 'ToChar(60)'后我停止阅读。不知何故,你的评论被剥夺了。 – 2011-03-17 17:49:35