gpt4 book ai didi

c# - Xml序列化序列问题

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:16 25 4
gpt4 key购买 nike

通常,所有这些都非常适合将我的对象序列化为 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>

您会注意到它的不同之处在于 VoltageDipLoads 的顺序不同。所以它似乎与模式中设置的序列不匹配。在用户反序列化 Xml 字符串后发生的事情是,Name、Loads 和 VoltageDip 属性被设置为它们的默认值(引用类型和字符串为 null,int 为 0),而不是序列化过程中保存的值。

使用该应用程序的每个人都使用完全相同的源代码。

谁能告诉我发生了什么事?为什么不同用户/机器之间的序列化时元素的顺序会发生变化?为什么反序列化过程不能在它发生时处理它?<​​/p>

最佳答案

尝试在属性的 XmlElement 属性上使用 order例如 -

[XmlElement(Order = 1)]
public string Prop1{get;set;}

[XmlElement(Order = 2)]
public string Prop1{get;set;}

关于c# - Xml序列化序列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5342930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com