2011-09-13 51 views
3

我有一個DateTime和一個我希望在XML序列化上專門格式化的子類。通常,沒有指定任何內容,DateTime的序列化只會遵循當前的文化,但我希望DateTime以某種方式格式化(即使不是反序列化),也是與子類一樣。使用特定方法控制XML序列化格式

因此,考慮到這些類:

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

如何指定序列化方法是將輸出:

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

回答

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

更新

我錯過我想要的DateTime格式化以某種方式 ......我所做的是下面的,而不是實施IXmlSerializable

[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「Attribute'XmlElement'在此聲明類型上無效,僅對'property,indexer,field,param,return'聲明有效。 – Beygi

+0

@Beygi:參照第一個例子?我會審查...但乍一看,你是正確的。 – IAbstract