TimeSpan,SolidColorBrush,等属性自动序列化

XmlSerializer 序列化不了 TimeSpan,可以做个辅助string属性来处理.如下:

使用string 来处理有一些优点就是,打开序列化后的文件,能方便的识别出 时间并修改. 比long 人性化一些.

把TimeSpan 属性设置为不序列化,

 <pre name="code" class="csharp">       [XmlIgnore]
        public TimeSpan 时间 { get; set; }

        public string 时间string
        {
            get { return 时间.ToString(); }
            set { 属性转换(x => 时间 = x, 时间转换, value); }
        }

        /// <summary>
        ///     属性转换s the specified 属性设置方法.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="属性设置方法">The 属性设置方法.</param>
        /// <param name="值转换方法">The 值转换方法.</param>
        /// <param name="value">The value.</param>
        public static void 属性转换<T>(Func<T, T> 属性设置方法, Func<string, Tuple<bool, T>> 值转换方法, string value)
        {
            var k = 值转换方法(value);
            if (k.Item1)
            {
                属性设置方法.Invoke(k.Item2);
            }
        }


        private Tuple<bool, TimeSpan> 时间转换(string value)
        {
            TimeSpan r;
            bool k = (TimeSpan.TryParse(value, out r));
            return new Tuple<bool, TimeSpan>(k, r);
        }


 转换方法是用了泛型来转换.这样可以方便的扩展其他属性类型如 颜色: 

        [XmlIgnore]
        public SolidColorBrush 颜色 { get; set; }

        public string 颜色s
        {
            get { return 颜色.Color.ToString(); }
            set { 属性转换(x => 颜色 = x, 颜色转换, value); }
        }
        private Tuple<bool, SolidColorBrush> 颜色转换(string value)
        {
            object convertFromString = ColorConverter.ConvertFromString(value);
            bool k = (convertFromString == null);
            if (k) return new Tuple<bool, SolidColorBrush>(false, null);
            var r = new SolidColorBrush((Color) convertFromString);
            return new Tuple<bool, SolidColorBrush>(true, r);
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值