我的问题是 How to serialize a TimeSpan to XML的延续 我有许多DTO对象传递TimeSpan实例.使用原始帖子中描述的hack有效,但它要求我在每个DTO中为每个TimeSpan属性重复相同的代码. 所以,我带来了以下
我有许多DTO对象传递TimeSpan实例.使用原始帖子中描述的hack有效,但它要求我在每个DTO中为每个TimeSpan属性重复相同的代码.
所以,我带来了以下包装类,它是XML可序列化的就好了:
#if !SILVERLIGHT [Serializable] #endif [DataContract] public class TimeSpanWrapper { [DataMember(Order = 1)] [XmlIgnore] public TimeSpan Value { get; set; } public static implicit operator TimeSpan?(TimeSpanWrapper o) { return o == null ? default(TimeSpan?) : o.Value; } public static implicit operator TimeSpanWrapper(TimeSpan? o) { return o == null ? null : new TimeSpanWrapper { Value = o.Value }; } public static implicit operator TimeSpan(TimeSpanWrapper o) { return o == null ? default(TimeSpan) : o.Value; } public static implicit operator TimeSpanWrapper(TimeSpan o) { return o == default(TimeSpan) ? null : new TimeSpanWrapper { Value = o }; } [JsonIgnore] [XmlElement("Value")] [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public long ValueMilliSeconds { get { return Value.Ticks / 10000; } set { Value = new TimeSpan(value * 10000); } } }
问题是它产生的XML看起来像这样:
<Duration> <Value>20000</Value> </Duration>
而不是自然
<Duration>20000</Duration>
我的问题是,我可以“吃蛋糕,吃完全”吗?意思是,享受所描述的hack而不会使用相同的重复代码混乱所有DTO并且具有自然的外观XML?
谢谢.
将[XmlElement(“Value”)]更改为[XmlText].然后,如果你序列化这样的事情:[Serializable] public class TestEntity { public string Name { get; set; } public TimeSpanWrapper Time { get; set; } }
你会得到这样的XML:
<TestEntity> <Name>Hello</Name> <Time>3723000</Time> </TestEntity>