2011-09-16 23 views
2

は、私は私のマシン上でそれをシリアライズ 異なるマシンでクラスのシリアル化の結果が異なるのはなぜですか?

/// <remarks /> 
[GeneratedCode("xsd", "4.0.30319.1")] 
[Serializable] 
[DebuggerStepThrough] 
[DesignerCategory("code")] 
[XmlType(Namespace = "http://www.schemas.com/IntegrationApplication-instance")] 
[XmlRoot(Namespace = "http://www.schemas.com/IntegrationApplication-instance", IsNullable = true)] 
public class Header 
{ 
    private string operationField; 

    private string requestIdField; 

    private DateTime sendDateField; 

    private string senderSystemNameField; 

    /// <remarks /> 
    [XmlElement(IsNullable = true)] 
    public string Operation 
    { 
     get 
     { 
      return operationField; 
     } 
     set 
     { 
      operationField = value; 
     } 
    } 

    /// <remarks /> 
    public string RequestId 
    { 
     get 
     { 
      return requestIdField; 
     } 
     set 
     { 
      requestIdField = value; 
     } 
    } 

    /// <remarks /> 
    public DateTime SendDate 
    { 
     get 
     { 
      return sendDateField; 
     } 
     set 
     { 
      sendDateField = value; 
     } 
    } 

    /// <remarks /> 
    [XmlElement(IsNullable = true)] 
    public string SenderSystemName 
    { 
     get 
     { 
      return senderSystemNameField; 
     } 
     set 
     { 
      senderSystemNameField = value; 
     } 
    } 
} 

のように、SendDateが指定されているに見えたクラス Headerを持っていますが、私は別のマシンのSendDate上のシリアル化コードを実行し、私の驚きのために何とか逃しています。私が使用するコードは、次のとおりです。

var header = new Header() 
      { 
       Operation = "new ope", 
       RequestId = "", 
       SendDate = DateTime.Now, 
       SenderSystemName = "asd" 
      }; 
var serializer = new XmlSerializer(typeof (Header)); 
var sb = new StringBuilder(); 
serializer.Serialize(new StringWriter(sb, CultureInfo.InvariantCulture), header); 

なぜこのコードの結果はマシンによって異なりますか?

+1

これは奇妙に見えます。他のマシンで全く同じコードを実行していますか?したがって、結果のXMLでは ''ノードは省略されていますか? –

+1

両方のマシンで同じ.netフレームワークバージョン? –

+0

私は同じ昨日、同じフレームワーク、別のコンパイラを持っていた。 1はVS2008でコンパイルされ、もう1つはVS2010(.net 4)でコンパイルされました。ヘッダー(GeneratedCode)は異なっていますか? – TheCodeKing

答えて

2

私は文化問題です。デシリアライゼーションコードは表示されませんが、このコードでは日付が異なる形式になると予想される可能性があります。このコードでカルチャが指定されていない場合は、コードが実行されているマシンの地域設定が行われます。両方のマシンの地域設定が同じ、特に日付形式であることを確認してください。

+0

SendDateタグの値が間違っているとわかっていました。しかし、ちょうど省略されている –

+0

それ以外にも、 'XmlSerializer'はISO 8601を使って日付をシリアライズし、カルチャに依存しない出力を生成する必要があります。 – shambulator

+0

@ javros:日付は日付として認識されずに無視されることもあります。 – VdesmedT

関連する問題