示例#1
0
        public void WriteValue(IValueWriter valueWriter, object value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <object> writer)
            {
                writer.WriteValue(value);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */

            if (TypeInfo <object> .Int64TypeHandle != (long)TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            valueWriter.DirectWrite(value);
        }
示例#2
0
 public void WriteValue(IValueWriter valueWriter, T value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <T> writer)
     {
         writer.WriteValue(value);
     }
     else if (value is IFormattable)
     {
         valueWriter.DirectWrite(value);
     }
     else if (value is string str)
     {
         valueWriter.WriteString(str);
     }
     else if (TypeHandle != TypeHelper.GetTypeHandle(value))
     {
         ValueInterface.GetInterface(value).Write(valueWriter, value);
     }
     else
     {
         valueWriter.DirectWrite(value);
     }
 }
示例#3
0
 public void WriteValue(IValueWriter valueWriter, FSharpOption <T> value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (value == FSharpOption <T> .None)
     {
         valueWriter.DirectWrite(null);
     }
     else
     {
         ValueInterface.WriteValue(valueWriter, value.Value);
     }
 }
示例#4
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <T> tWriter)
            {
                tWriter.WriteValue(value);

                return;
            }

            if (valueWriter is IValueWriter <System.Reflection.Assembly> assemblyWriter)
            {
                assemblyWriter.WriteValue(value);

                return;
            }

            valueWriter.WriteString(value.FullName);
        }
示例#5
0
 public void WriteValue(IValueWriter valueWriter, T value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <T> tWriter)
     {
         tWriter.WriteValue(value);
     }
     else if (valueWriter is IValueWriter <Type> typeWriter)
     {
         typeWriter.WriteValue(value);
     }
     else
     {
         if (value.Assembly == typeof(object).Assembly)
         {
             valueWriter.WriteString(value.FullName);
         }
         else
         {
             valueWriter.WriteString(value.AssemblyQualifiedName);
         }
     }
 }
示例#6
0
        /// <summary>
        /// 写入入口。
        /// </summary>
        internal static void Write(IValueWriter valueWriter, object value, Type declaringType)
        {
            if (value is null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var actualType = value.GetType();

            if (IsPointer(actualType))
            {
                throw new NotSupportedException("Pointer are not supported");
            }

            if (declaringType == actualType)
            {
                if (IsPrimitive(actualType))
                {
                    WritePrimitive(valueWriter, value, actualType);

                    return;
                }

                if (IsArray(actualType))
                {
                    WriteArray(valueWriter, value, actualType);

                    return;
                }
            }

            valueWriter.WriteObject(new SerializationRW(value, declaringType));
        }
示例#7
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <T> tWriter)
            {
                tWriter.WriteValue(value);

                return;
            }

            if (valueWriter is IValueWriter <Type> typeWriter)
            {
                typeWriter.WriteValue(value);

                return;
            }

            valueWriter.WriteString(value.AssemblyQualifiedName);
        }
示例#8
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var dictionaryRW = new DictionaryRW <T, TKey, TValue>();

            dictionaryRW.Initialize(value);

            if (typeof(TKey) == typeof(string))
            {
                valueWriter.WriteObject(Unsafe.As <IDataReader <string> >(dictionaryRW));
            }
            else
            {
                if (valueWriter is IMapValueWriter mapWriter)
                {
                    mapWriter.WriteMap(dictionaryRW);
                }
                else
                {
                    valueWriter.WriteObject(dictionaryRW.As <string>());
                }
            }
        }
示例#9
0
        public void WriteValue(IValueWriter valueWriter, object value)
        {
            if (value is null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (TypeHandle != TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            valueWriter.DirectWrite(value);
        }
示例#10
0
 public void WriteValue(IValueWriter valueWriter, T value)
 {
     if (value == null)
     {
         valueWriter.DirectWrite(null);
     }
     else
     {
         valueWriter.WriteArray(ArrayRW <T> .Create(value));
     }
 }
示例#11
0
        public void WriteValue(IValueWriter valueWriter, DateTimeOffset value)
        {
            if (valueWriter is IValueWriter <DateTimeOffset> dateTimeOffsetWriter)
            {
                dateTimeOffsetWriter.WriteValue(value);

                return;
            }

            valueWriter.DirectWrite(value);
        }
示例#12
0
 public void OnReadValue(int key, IValueWriter valueWriter)
 {
     if (dbDataReader.Read())
     {
         valueWriter.WriteObject(Reader);
     }
     else
     {
         valueWriter.DirectWrite(null);
     }
 }
示例#13
0
        public void WriteValue(IValueWriter valueWriter, TimeSpan value)
        {
            if (valueWriter is IValueWriter <TimeSpan> timeSpanWriter)
            {
                timeSpanWriter.WriteValue(value);

                return;
            }

            valueWriter.DirectWrite(value);
        }
示例#14
0
 public void WriteValue(IValueWriter valueWriter, T?value)
 {
     if (value == null)
     {
         valueWriter.DirectWrite(null);
     }
     else
     {
         ValueInterface <T> .Content.WriteValue(valueWriter, value.Value);
     }
 }
示例#15
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <T> writer)
            {
                writer.WriteValue(value);

                return;
            }

            if (value is IFormattable)
            {
                valueWriter.DirectWrite(value);

                return;
            }

            if (value is string)
            {
                valueWriter.WriteString((string)(object)value);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (Int64TypeHandle != (long)TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            valueWriter.DirectWrite(value);
        }
示例#16
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (CheckChildrenInstance && Int64TypeHandle != (long)TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            if (valueWriter is ISingleThreadOptimize)
            {
                var current_cache = thread_cache;

                if (current_cache == null)
                {
                    InitializeInstance(ref current_cache);
                }

                if (current_cache.IsUsed)
                {
                    goto Default;
                }

                current_cache.IsUsed = true;

                current_cache.Instance.Initialize(value);

                valueWriter.WriteObject(current_cache.Instance);

                current_cache.IsUsed = false;

                return;
            }

Default:

            var fastObjectRW = FastObjectRW <T> .Create();

            fastObjectRW.Initialize(value);

            valueWriter.WriteObject(fastObjectRW);
        }
示例#17
0
文件: ListRW.cs 项目: zxbe/Swifter
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var listRW = new ListRW <T, TValue>();

            listRW.Initialize(value);

            valueWriter.WriteArray(listRW);
        }
示例#18
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var arrayWriter = ArrayRW <T> .Create();

            arrayWriter.Initialize(value);

            valueWriter.WriteArray(arrayWriter);
        }
示例#19
0
 public void WriteValue(IValueWriter valueWriter, TElement[] value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <TElement[]> writer)
     {
         writer.WriteValue(value);
     }
     else
     {
         valueWriter.WriteArray(new ArrayRW <TElement>(value));
     }
 }
示例#20
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var dictionaryRW = new DictionaryRW <T, TKey, TValue>();

            dictionaryRW.Initialize(value);

            valueWriter.WriteObject(((IDataReader)dictionaryRW).As <string>());
        }
示例#21
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var enumeratorReader = new EnumeratorReader <T, TValue>();

            enumeratorReader.Initialize(value);

            valueWriter.WriteArray(enumeratorReader);
        }
示例#22
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var collectionRW = new CollectionRW <T, TValue>();

            collectionRW.Initialize(value);

            valueWriter.WriteArray(collectionRW);
        }
示例#23
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value is null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var enumeratorReader = new EnumeratorReader <T, TValue>
            {
                content = value
            };

            valueWriter.WriteArray(enumeratorReader);
        }
示例#24
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value is null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var dictionaryRW = new DictionaryRW <T>
            {
                content = value
            };

            valueWriter.WriteObject(dictionaryRW.As <string>());
        }
示例#25
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value is null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var collectionRW = new CollectionRW <T>
            {
                content = value
            };

            valueWriter.WriteArray(collectionRW);
        }
示例#26
0
 public void WriteValue(IValueWriter valueWriter, FSharpList <T> value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <FSharpList <T> > writer)
     {
         writer.WriteValue(value);
     }
     else
     {
         valueWriter.WriteArray(new FSharpListRW <T> {
             content = value
         });
     }
 }
示例#27
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            var enumerator = value?.GetEnumerator();

            if (enumerator == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            var enumeratorReader = new EnumeratorReader <IEnumerator <TValue>, TValue>();

            enumeratorReader.Initialize(enumerator);

            valueWriter.WriteArray(enumeratorReader);
        }
示例#28
0
 public void WriteValue(IValueWriter valueWriter, T value)
 {
     if (value is null)
     {
         valueWriter.DirectWrite(null);
     }
     else if (valueWriter is IValueWriter <T> writer)
     {
         writer.WriteValue(value);
     }
     else
     {
         valueWriter.WriteArray(new ListRW <T, TValue> {
             content = value
         });
     }
 }
示例#29
0
        public void WriteValue(IValueWriter valueWriter, Version value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <Version> versionReader)
            {
                versionReader.WriteValue(value);
            }
            else
            {
                valueWriter.WriteString(value.ToString());
            }
        }
示例#30
0
        public void WriteValue(IValueWriter valueWriter, Uri value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            if (valueWriter is IValueWriter <Uri> writer)
            {
                writer.WriteValue(value);

                return;
            }

            valueWriter.WriteString(value.ToString());
        }