Xml 序列化序列问题 [英] Xml Serialization Sequence Issue

查看:64
本文介绍了Xml 序列化序列问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通常所有这些都非常适合将我的对象序列化为 Xml 字符串并再次返回到一个对象中.但是,我似乎无法追踪到不同最终用户之间的这种不一致.

Normally all this works great for Serializing my object into an Xml string and back again into an object. However, I have this inconsistency between different end users that I can't seem to track down.

基本上,当我序列化一个对象时,它看起来像这样一旦转换为 Xml:

Basically, when I serialize an object, it looks like this once converted to 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>

然而,当其他随机用户运行我的程序并序列化对象时,他们最终得到了这个:

However, when other random users run my program and they serialize the object, they end up with this instead:

<?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),而不是序列化过程中保存的值.

You'll notice that it's different in that VoltageDip and Loads are in different sequences. So it doesn't seem to match the sequence set in the schema. What happens then after the user deserializes the Xml string, is that Name, Loads and VoltageDip properties are set to their defaults (null for reference types and strings and 0 for int) instead of the values saved in the Serialization process.

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

Everyone using the application is on the same exact source code.

谁能告诉我发生了什么?为什么不同用户/机器之间的序列化元素顺序会发生变化?发生这种情况时,为什么反序列化过程不能处理?

Can anyone tell me what is happening? Why does the order of elements change on Serializtion between different users/machines? Why can't the deserialization process handles this when it occurs?

推荐答案

尝试在属性的 XmlElement 属性上使用 order对于前 -

Try using order on the XmlElement attribute on your properties For ex -

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

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

这篇关于Xml 序列化序列问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆