加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读