2011-09-13 13 views
3

私は、XMLシリアル化で特に書式設定したいDateTimeとサブクラスを持っています。通常、何も指定せずにDateTimeのシリアライズは現在のカルチャに従いますが、(デシリアライズできない場合でも)特定の方法でDateTimeをフォーマットしたい場合は、サブクラスと同じです。だから、特定のメソッドを持つXMLコントロールのシリアル化形式

、これらのクラスを与えられた:

<MyClass> 
    <MyDateTime>2011-9-13T10:30:00Z</MyDateTime> 
    <MySubClass>ID-Name</MySubClass> 
</MyClass> 

答えて

2

あなたがのXmlSerializerを利用している:?

public class MyClass 
{ 
    public DateTime MyDateTime { get; set; } 
    public MySubClass TheSubClass { get; set; } 
} 

public class MySubClass 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

どのようにして、出力しまう直列化メソッドを指定しませんかその場合は、[Serializable]属性を含める必要はなく、XmlSerializerでは無視されます。自分のタイプにIXmlSerializableインターフェイスを実装することによって、シリアル化をカスタマイズできます。これは近いはず -

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

+0

私の悪い癖を、私はいつも '[Serializable]'が必要だと思います。ありがとう。 – MPelletier

2

これは、私はあなたが持っているとして、XMLシリアル化でタイプを入れ子にしていない...私の頭の上からです。

[XmlRoot] 
public class MyClass 
{ 
    [XmlElement] 
    public DateTime MyDateTime { get; set; } 
    [XmlElement] 
    public MySubClass TheSubClass { get; set; } 
} 

[XmlRoot] 
public class MySubClass 
{ 
    [XmlElement] 
    public int ID { get; set; } 
    [XmlIgnore] // since you didn't include in XML snippet 
    public string Name { get; set; } 
} 

単純なXmlシリアル化を実行している場合:MSDN XmlSerializerをチェックします。

更新

私は...私がやったことは、次のではなく、IXmlSerializableを実施している私は、DateTimeのは、特定の方法でフォーマットしたいを逃した:

[XmlRoot] 
public class MyClass 
{ 
    [XmlElement] 
    public string MyDateTime { get; set; } 
    [XmlIgnore] 
    public DateTime DT 
    { 
     get { /* return DateTime from MyDateTime */ } 
     set { MyDateTime = value.ToString(/* use formatting */); } // ex. ToString("yyyy, MMMM dd : hh:mm") 
    } 
    [XmlElement] 
    public MySubClass TheSubClass { get; set; } 
} 
+0

ありがとうございます。 Nameの場合、実際にはMySubClassタグのID-Nameという要素の一部ですが、それはLuksanの答えで分かりました。 – MPelletier

+0

@IAbstract [XmlElement] public class MySubClass results "属性 'XmlElement'はこの宣言型では無効です。 'property、indexer、field、param、return'宣言でのみ有効です。 – Beygi

+0

@Beygi:最初の例を参照していますか?私は見直しをするだろうが、一見すると、あなたは正しい。 – IAbstract

関連する問題