2012-03-27 87 views
0

我有模式:xmlconvert字符串到日期

[XmlRoot(ElementName = "event", IsNullable=true)] 
public class Event 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    public eventArtists artists { get; set; } 
    public venue venue { get; set; } 
    public string startDate { get;set;} 
    public string description { get; set; } 
    [XmlElement("image")] 
    public List<string> image { get; set; } 
    public int attendance { get; set; } 
    public int reviews { get; set; } 
    public string url { get; set; } 
    public string website { get; set; } 
    public string tickets { get; set; } 
    public int cancelled { get; set; } 
    [XmlArray(ElementName="tags")] 
    [XmlArrayItem(ElementName="tag")] 
    public List<string> tags { get; set; } 
} 

现在我想转换公共字符串的startDate {获取;集;}到DatiTime:

public DateTime startDate { get{return startDate;} set{startDate. = DateTime.Parse(startDate);}} 

我怎么能这样做?

回答

3

您没有什么特别的事情要做,只需要声明属性为DateTime。 XmlSerializer的会自动转换为字符串像2012-03-27T16:21:12.8135895+02:00

如果需要使用特定的格式,你必须使用一个小窍门......戴上DateTime财产[XmlIgnore]属性,并添加一个新字符串属性,处理的格式:

[XmlIgnore] 
public DateTime startDate { get;set;} 

private const string DateTimeFormat = "ddd, dd MMM yyyy HH:mm:ss"; 

[XmlElement("startDate")] 
[EditorBrowsable(EditorBrowsableState.Never)] 
public string startDateXml 
{ 
    get { return startDate.ToString(DateTimeFormat, CultureInfo.InvariantCulture); } 
    set { startDate = DateTime.ParseExact(value, DateTimeFormat, CultureInfo.InvariantCulture); } 
} 

(该[EditorBrowsable]属性是有避免显示在智能感知的属性,因为它是唯一的序列化有用)

+0

例外:字符串“星期五,2012年03月30 20时00分00秒'不是有效的AllXsd值。 – Evgeniy 2012-03-27 14:24:59

+0

@Evg,看我更新的答案 – 2012-03-27 14:29:59

+0

很酷的把戏!谢谢! – Evgeniy 2012-03-27 15:10:08