c# – Xml序列化序列问题
发布时间:2020-12-16 01:42:10 所属栏目:百科 来源:网络整理
导读:通常,这一切都非常适合将我的对象序列化为Xml字符串并再次返回到对象中.但是,我有不同的最终用户之间的这种不一致,我似乎无法追查. 基本上,当我序列化一个对象时,它看起来像转换为Xml后: ?xml version="1.0" encoding="utf-8"?Step xmlns:xsi="http://www.w
通常,这一切都非常适合将我的对象序列化为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和Loads的顺序不同.所以它似乎与模式中设置的序列不匹配.在用户反序列化Xml字符串之后会发生什么,Name,Loads和VoltageDip属性被设置为它们的默认值(引用类型和字符串为null,int为0)而不是序列化过程中保存的值. 使用该应用程序的每个人都使用相同的源代码. 谁能告诉我发生了什么?为什么不同用户/机器之间的Serializtion元素顺序会发生变化?为什么反序列化过程在发生时不能处理? 解决方法
尝试在属性的XmlElement属性上使用顺序
对于前 – [XmlElement(Order = 1)] public string Prop1{get;set;} [XmlElement(Order = 2)] public string Prop1{get;set;} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |