NewLife/X

优化时间日期的二进制序列化
大石头 编写于 2018-06-07 23:03:02
共计: 修改3个文件,增加10行、删除8行。
修改 +3 -1
修改 +4 -4
修改 +3 -3
修改 +3 -1
diff --git a/NewLife.Core/Common/Utility.cs b/NewLife.Core/Common/Utility.cs
index 4690bca..475f019 100644
--- a/NewLife.Core/Common/Utility.cs
+++ b/NewLife.Core/Common/Utility.cs
@@ -119,6 +119,8 @@ namespace System
             // 特殊处理时间,转Unix秒
             if (value is DateTime dt)
             {
+                if (dt == DateTime.MinValue) return 0;
+
                 //// 先转UTC时间再相减,以得到绝对时间差
                 //return (Int32)(dt.ToUniversalTime() - _dt1970).TotalSeconds;
                 return (Int32)(dt - _dt1970).TotalSeconds;
@@ -282,7 +284,7 @@ namespace System
                 return defaultValue;
             }
             // 特殊处理整数,Unix秒,绝对时间差,不考虑UTC时间和本地时间。
-            if (value is Int32 k) return _dt1970.AddSeconds(k);
+            if (value is Int32 k) return k == 0 ? DateTime.MinValue : _dt1970.AddSeconds(k);
             if (value is Int64 m)
             {
                 if (m > 100 * 365 * 24 * 3600L)
修改 +4 -4
diff --git a/NewLife.Core/Serialization/Binary/Binary.cs b/NewLife.Core/Serialization/Binary/Binary.cs
index aed0f58..375c90b 100644
--- a/NewLife.Core/Serialization/Binary/Binary.cs
+++ b/NewLife.Core/Serialization/Binary/Binary.cs
@@ -112,7 +112,7 @@ namespace NewLife.Serialization
         /// <param name="value">目标对象</param>
         /// <param name="type">类型</param>
         /// <returns></returns>
-        [DebuggerHidden]
+        //[DebuggerHidden]
         public virtual Boolean Write(Object value, Type type = null)
         {
             if (type == null)
@@ -213,7 +213,7 @@ namespace NewLife.Serialization
         /// <summary>读取指定类型对象</summary>
         /// <param name="type"></param>
         /// <returns></returns>
-        [DebuggerHidden]
+        //[DebuggerHidden]
         public virtual Object Read(Type type)
         {
             //var value = type.CreateInstance();
@@ -226,14 +226,14 @@ namespace NewLife.Serialization
         /// <summary>读取指定类型对象</summary>
         /// <typeparam name="T"></typeparam>
         /// <returns></returns>
-        [DebuggerHidden]
+        //[DebuggerHidden]
         public T Read<T>() => (T)(Object)Read(typeof(T));
 
         /// <summary>尝试读取指定类型对象</summary>
         /// <param name="type"></param>
         /// <param name="value"></param>
         /// <returns></returns>
-        [DebuggerHidden]
+        //[DebuggerHidden]
         public virtual Boolean TryRead(Type type, ref Object value)
         {
             if (Hosts.Count == 0) WriteLog("BinaryRead {0} {1}", type.Name, value);
修改 +3 -3
diff --git a/NewLife.Core/Serialization/Binary/BinaryGeneral.cs b/NewLife.Core/Serialization/Binary/BinaryGeneral.cs
index 23f9282..6ef8e6c 100644
--- a/NewLife.Core/Serialization/Binary/BinaryGeneral.cs
+++ b/NewLife.Core/Serialization/Binary/BinaryGeneral.cs
@@ -446,7 +446,7 @@ namespace NewLife.Serialization
         #region 字符串
         /// <summary>从当前流中读取下一个字符,并根据所使用的 Encoding 和从流中读取的特定字符,提升流的当前位置。</summary>
         /// <returns></returns>
-        public virtual Char ReadChar() { return Convert.ToChar(ReadByte()); }
+        public virtual Char ReadChar() => Convert.ToChar(ReadByte());
 
         /// <summary>从当前流中读取一个字符串。字符串有长度前缀,一次 7 位地被编码为整数。</summary>
         /// <returns></returns>
@@ -454,8 +454,8 @@ namespace NewLife.Serialization
         {
             // 先读长度
             var n = Host.ReadSize();
-            if (n < 0) return null;
-            if (n == 0) return String.Empty;
+            if (n <= 0) return null;
+            //if (n == 0) return String.Empty;
 
             var buffer = ReadBytes(n);