Ejemplo n.º 1
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value  = (char)obj;
            var writer = args.Writer;

            writer.Write('"');
            if (value < 256)
            {
                var escape = SpecialCharacters[value];
                if (escape == null)
                {
                    writer.Write(value);
                }
                else if (args.FilterSpecialCharacter == false)
                {
                    writer.Write(escape);
                }
            }
            else if (args.CastUnicode)
            {
                writer.Write(SpecialCharacters[value]);
            }
            else
            {
                writer.Write(value);
            }
            writer.Write('"');
        }
Ejemplo n.º 2
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;
            var value  = (SerializationInfo)obj;
            var comma  = new CommaHelper(writer);

            foreach (var item in value)
            {
                if (args.IgnoreNullMember)
                {
                    if (item.Value == null || item.Value is DBNull)
                    {
                        continue;
                    }
                }
                comma.AppendCommaIgnoreFirst();
                args.WriterContainer.GetWriter <string>().Write(item.Name, args);
                writer.Write(':');

                args.WriteCheckLoop(item.Value, null);
            }
        }
Ejemplo n.º 3
0
            public void Write(object obj, JsonWriterArgs args)
            {
                if (obj == null)
                {
                    args.WriterContainer.GetNullWriter().Write(null, args);
                    return;
                }
                var writer = TypeService.IsImmutable <T>() ? args.WriterContainer.GetWriter <T>() : null;
                var list   = (IList <T>)obj;

                if (list.Count == 0)
                {
                    args.BeginArray();
                    args.EndArray();
                    return;
                }
                args.BeginArray();
                args.WriteCheckLoop(list[0], writer);

                for (int i = 1, length = list.Count; i < length; i++)
                {
                    args.Common();
                    args.WriteCheckLoop(list[i], writer);
                }

                args.EndArray();
            }
Ejemplo n.º 4
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;

            args.BeginObject();
            var comma = new CommaHelper(writer);
            var ee    = ((IDictionary)obj).GetEnumerator();

            while (ee.MoveNext())
            {
                var value = ee.Value;
                if (args.IgnoreNullMember)
                {
                    if (value == null || value is DBNull)
                    {
                        continue;
                    }
                }

                comma.AppendCommaIgnoreFirst();

                args.WriterContainer.GetWriter <string>().Write(ee.Key.To <string>(), args);
                writer.Write(':');
                args.WriteCheckLoop(value, null);
            }

            args.EndObject();
        }
Ejemplo n.º 5
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;
            var list   = (IList)obj;

            if (list.Count == 0)
            {
                writer.Write("[]");
                return;
            }
            args.BeginArray();
            args.WriteCheckLoop(list[0], null);

            for (int i = 1, length = list.Count; i < length; i++)
            {
                args.Common();
                args.WriteCheckLoop(list[i], null);
            }
            args.EndArray();
        }
Ejemplo n.º 6
0
            /// <exception cref="IOException"> 发生 I/O 错误。</exception>
            /// <exception cref="ObjectDisposedException"> <see cref="T:System.IO.TextWriter" /> 是关闭的。</exception>
            public void Write(object obj, JsonWriterArgs args)
            {
                if (obj == null)
                {
                    args.WriterContainer.GetNullWriter().Write(null, args);
                    return;
                }
                var writer = TypeService.IsImmutable <TValue>() ? args.WriterContainer.GetWriter <TValue>() : null;

                args.BeginObject();
                var comma = new CommaHelper(args.Writer);

                foreach (var item in (IDictionary <TKey, TValue>)obj)
                {
                    var value = item.Value;
                    if (args.IgnoreNullMember)
                    {
                        if (value == null || value is DBNull)
                        {
                            continue;
                        }
                    }
                    comma.AppendCommaIgnoreFirst();

                    args.WriterContainer.GetWriter <string>().Write(item.Key as string ?? item.Key.To <string>(), args);
                    args.Colon();
                    args.WriteCheckLoop(value, writer);
                }

                args.EndObject();
            }
Ejemplo n.º 7
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;
            var value  = (NameValueCollection)obj;
            var comma  = new CommaHelper(writer);

            args.BeginObject();
            for (int i = 0, length = value.Count; i < length; i++)
            {
                var name = value.GetKey(i);
                var str  = value.Get(i);
                if (args.IgnoreNullMember)
                {
                    if (str == null)
                    {
                        continue;
                    }
                }
                comma.AppendCommaIgnoreFirst();
                args.WriterContainer.GetWriter <string>().Write(name, args);
                writer.Write(':');
                args.WriterContainer.GetWriter <string>().Write(str, args);
            }
            args.EndObject();
        }
Ejemplo n.º 8
0
        /// <summary>
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="args"></param>
        /// <exception cref="InvalidOperationException">IDataReader已经关闭</exception>
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var reader = (IDataReader)obj;

            if (reader.IsClosed)
            {
                throw new InvalidOperationException("IDataReader已经关闭");
            }
            args.BeginArray();

            if (reader.FieldCount == 1)
            {
                var comma = new CommaHelper(args.Writer);
                while (reader.Read())
                {
                    var value = reader.GetValue(0);
                    if (args.IgnoreNullMember)
                    {
                        continue;
                    }
                    if (value == null || value is DBNull)
                    {
                        if (args.IgnoreNullMember)
                        {
                            continue;
                        }
                        args.WriterContainer.GetNullWriter().Write(null, args);
                    }
                    else
                    {
                        args.WriterContainer.GetWriter(value.GetType()).Write(value, args);
                    }
                    comma.AppendCommaIgnoreFirst();
                }
            }
            else
            {
                var writer = args.WriterContainer.GetWriter(Type);
                if (reader.Read())
                {
                    writer.Write(reader, args);
                    while (reader.Read())
                    {
                        args.Common();
                        writer.Write(reader, args);
                    }
                }
            }
            args.EndArray();
        }
Ejemplo n.º 9
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value = (Guid)obj;
            var str   = value.ToString(args.GuidFormatString);

            if (args.GuidToUpper)
            {
                str = str.ToUpperInvariant();
            }
            args.WriterContainer.GetWriter <string>().Write(str, args);
        }
Ejemplo n.º 10
0
            public void Write(object obj, JsonWriterArgs args)
            {
                var value = (Enum)obj;

                if (args.EnumToNumber)
                {
                    args.WriterContainer.GetWriter(_UnderlyingType).Write(value, args);
                }
                else
                {
                    args.WriterContainer.GetWriter <string>().Write(value.ToString("g"), args);
                }
            }
Ejemplo n.º 11
0
 /// <summary>
 /// 将对象转换为Json字符串
 /// </summary>
 /// <param name="obj"> </param>
 /// <param name="settings"> 序列化Json字符串时使用的设置参数 </param>
 public static string ToJsonString(this object obj, JsonBuilderSettings settings)
 {
     using (var buffer = new QuickStringWriter(4096))
     {
         var args = new JsonWriterArgs(WriterContainer, buffer, settings);
         if (obj == null || obj is DBNull)
         {
             WriterContainer.GetNullWriter().Write(null, args);
             return(buffer.ToString());
         }
         var writer = WriterContainer.GetWriter(obj.GetType());
         writer.Write(obj, args);
         return(buffer.ToString());
     }
 }
Ejemplo n.º 12
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var writer = args.Writer;

            if (obj == null)
            {
                writer.Write("null");
                return;
            }
            if (Wrap == null)
            {
                throw new NotImplementedException($"无法获取 {nameof(Wrap.Writer)}");
            }
            Wrap.Writer.Write(obj, args);
        }
Ejemplo n.º 13
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var table   = (DataTable)obj;
            var writer  = args.Writer;
            var comma1  = new CommaHelper(writer);
            var columns = table.Columns;
            var length  = columns.Count;

            args.BeginArray();
            for (int j = 0, count = table.Rows.Count; j < count; j++)
            {
                args.BeginObject();
                comma1.AppendCommaIgnoreFirst();
                var row   = table.Rows[j];
                var comma = new CommaHelper(writer);
                for (var i = 0; i < length; i++)
                {
                    var column = columns[i];
                    if (args.IgnoreNullMember)
                    {
                        if (row.IsNull(column))
                        {
                            continue;
                        }
                    }

                    comma.AppendCommaIgnoreFirst();
                    args.WriterContainer.GetWriter <string>().Write(column.ColumnName, args);
                    writer.Write(':');
                    if (row.IsNull(column))
                    {
                        args.WriterContainer.GetNullWriter().Write(null, args);
                    }
                    else
                    {
                        var value = row[column];
                        args.WriterContainer.GetWriter(value.GetType()).Write(value, args);
                    }
                }
                args.EndObject();
            }
            args.EndArray();
        }
Ejemplo n.º 14
0
        /// <exception cref="SecurityException">调用方没有所要求的权限。</exception>
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var value = (ISerializable)obj;

            var info = new SerializationInfo(obj.GetType(), _Converter);

            value.GetObjectData(info, (new StreamingContext(StreamingContextStates.All, args)));
            var writer = args.WriterContainer.GetWriter <SerializationInfo>();

            writer.Write(info, args);
        }
Ejemplo n.º 15
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value  = (sbyte)obj;
            var writer = args.Writer;

            if (args.QuotWrapNumber)
            {
                writer.Write('"');
                writer.Write(value);
                writer.Write('"');
            }
            else
            {
                writer.Write(value);
            }
        }
Ejemplo n.º 16
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var view    = (DataView)obj;
            var writer  = args.Writer;
            var comma1  = new CommaHelper(writer);
            var columns = (view.Table ?? view.ToTable()).Columns;
            var length  = columns.Count;

            args.BeginArray();
            for (int j = 0, count = view.Count; j < count; j++)
            {
                comma1.AppendCommaIgnoreFirst();
                var row   = view[j];
                var comma = new CommaHelper(writer);
                for (var i = 0; i < length; i++)
                {
                    var column = columns[i];
                    var value  = row[i];
                    if (args.IgnoreNullMember)
                    {
                        if (value == null || value is DBNull)
                        {
                            continue;
                        }
                    }

                    comma.AppendCommaIgnoreFirst();
                    args.WriterContainer.GetWriter <string>().Write(column.ColumnName, args);
                    writer.Write(':');
                    if (value == null || value is DBNull)
                    {
                        args.WriterContainer.GetNullWriter().Write(null, args);
                    }
                    else
                    {
                        args.WriterContainer.GetWriter(value.GetType()).Write(value, args);
                    }
                }
            }
            args.EndArray();
        }
Ejemplo n.º 17
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var obj1 = ((IFormatProvider)obj).GetFormat(typeof(Json));

            if (obj1 != null)
            {
                args.WriteCheckLoop(obj1, null);
            }
            else if (Count == 0)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
            }
            else
            {
                this[0].Writer.Write(obj, args);
            }
        }
Ejemplo n.º 18
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value = (DateTime)obj;
            var mode  = 0; //0:empty 1:date 2:time 3:datetime

            if (args.FormatDate && value > _OnlyTime)
            {
                mode |= 1;
            }

            if (args.FormatTime)
            {
                if (args.IgnoreEmptyTime &&
                    value.Millisecond == 0 &&
                    value.Hour == 0 &&
                    value.Minute == 0 &&
                    value.Second == 0)
                {
                }
                else
                {
                    mode |= 2;
                }
            }

            switch (mode)
            {
            case 1:
                args.WriterContainer.GetWriter <string>().Write(value.ToString(args.DateFormatString ?? "yyyy-MM-dd"), args);
                break;

            case 2:
                args.WriterContainer.GetWriter <string>().Write(value.ToString(args.TimeFormatString ?? "HH:mm:ss"), args);
                break;

            case 3:
                args.WriterContainer.GetWriter <string>().Write(
                    value.ToString(args.DateTimeFormatString ?? "yyyy-MM-dd HH:mm:ss"), args);
                break;

            default:
                args.WriterContainer.GetWriter <string>().Write("", args);
                break;
            }
        }
Ejemplo n.º 19
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;
            var value  = (DynamicObject)obj;

            var memberNames = value.GetDynamicMemberNames();
            var names       = memberNames as string[] ?? memberNames.ToArray();

            if (names.Length == 0)
            {
                args.WriterContainer.GetWriter <string>().Write(obj, args);
                return;
            }
            var comma = new CommaHelper(writer);

            args.BeginObject();
            foreach (var name in names)
            {
                object val;
                if (value.TryGetMember(new MyGetMemberBinder(name), out val) == false &&
                    value.TryGetIndex(new MyGetIndexBinder(name), new object[] { name }, out val) == false)
                {
                    continue;
                }

                if (args.IgnoreNullMember)
                {
                    if (val == null || val is DBNull)
                    {
                        continue;
                    }
                }

                comma.AppendCommaIgnoreFirst();
                args.WriterContainer.GetWriter <string>().Write(name, args);
                args.Colon();
                args.WriteCheckLoop(val, null);
            }
            args.EndObject();
        }
Ejemplo n.º 20
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value = (IObjectReference)obj;
            var obj1  = value.GetRealObject(new StreamingContext(StreamingContextStates.All, args));

            if (obj1 != null)
            {
                args.WriteCheckLoop(obj1, null);
            }
            else if (Count == 0)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
            }
            else
            {
                this[0].Writer.Write(obj, args);
            }
        }
Ejemplo n.º 21
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value = (bool)obj;

            if (args.BooleanToNumber)
            {
                args.WriterContainer.GetWriter <int>().Write(value ? 1 : 0, args);
            }
            else if (args.QuotWrapBoolean)
            {
                args.Writer.Write('"');
                args.Writer.Write(value);
                args.Writer.Write('"');
            }
            else
            {
                args.Writer.Write(value);
            }
        }
Ejemplo n.º 22
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var ds     = (DataSet)obj;
            var writer = args.Writer;
            var comma  = new CommaHelper(writer);

            args.BeginObject();
            for (int i = 0, length = ds.Tables.Count; i < length; i++)
            {
                comma.AppendCommaIgnoreFirst();
                var table = ds.Tables[i];
                args.WriterContainer.GetWriter <string>().Write(table.TableName, args);
                writer.Write(':');
                args.WriterContainer.GetWriter(Type).Write(table, args);
            }
            args.EndObject();
        }
Ejemplo n.º 23
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null)
            {
                args.WriterContainer.GetNullWriter().Write(null, args);
                return;
            }
            var writer = args.Writer;

            args.BeginArray();
            var ee = (IEnumerator)obj;

            if (ee.MoveNext())
            {
                args.WriteCheckLoop(ee.Current, null);
                while (ee.MoveNext())
                {
                    args.Common();
                    args.WriteCheckLoop(ee.Current, null);
                }
            }
            args.EndArray();
        }
Ejemplo n.º 24
0
            public void Write(object obj, JsonWriterArgs args)
            {
                if (obj == null)
                {
                    args.WriterContainer.GetNullWriter().Write(null, args);
                    return;
                }

                var wirter = TypeService.IsImmutable <T>() ? args.WriterContainer.GetWriter <T>() : null;

                args.BeginArray();
                var ee = ((IEnumerable <T>)obj).GetEnumerator();

                if (ee.MoveNext())
                {
                    args.WriteCheckLoop(ee.Current, wirter);
                    while (ee.MoveNext())
                    {
                        args.Common();
                        args.WriteCheckLoop(ee.Current, wirter);
                    }
                }
                args.EndArray();
            }
Ejemplo n.º 25
0
        public void Write(object obj, JsonWriterArgs args)
        {
            var value = (Version)obj;

            args.WriterContainer.GetWriter <string>().Write(value.ToString(), args);
        }
Ejemplo n.º 26
0
 private static void Write(ref CommaHelper comma, JsonMember member, object value, JsonWriterArgs args)
 {
     if (value == null || value is DBNull)
     {
         if (args.IgnoreNullMember)
         {
             return;
         }
         comma.AppendCommaIgnoreFirst();
         args.Writer.Write(member.EncodedJsonName);
         args.Colon();
         args.WriterContainer.GetNullWriter().Write(null, args);
     }
     else
     {
         comma.AppendCommaIgnoreFirst();
         args.Writer.Write(member.EncodedJsonName);
         args.Colon();
         args.WriteCheckLoop(value, null);
     }
 }
Ejemplo n.º 27
0
        public void Write(object obj, JsonWriterArgs args)
        {
            if (obj == null || obj is DBNull)
            {
                return;
            }
            var writer = args.Writer;

            args.BeginObject();

            var jtype = JsonType.Get(obj.GetType());
            var ms    = jtype.Members;
            var comma = new CommaHelper(writer);

            if (args.SerializableType)
            {
                writer.Write("\"$Type$\":");
                args.WriterContainer.GetWriter <string>().Write(jtype.Type.AssemblyQualifiedName, args);
                comma.AppendCommaIgnoreFirst();
            }

            var length = args.SerializableField ? ms.Length : jtype.PropertyCount;

            for (var i = 0; i < length; i++)
            {
                var member = ms[i];
                if (member.NonSerialized && args.FormatAllMember == false)
                {
                    continue;
                }
                if (member.CanRead == false)
                {
                    continue;
                }


                var value = member.GetValue(obj);
                if (value == null || value is DBNull)
                {
                    if (args.IgnoreNullMember)
                    {
                        continue;
                    }
                    comma.AppendCommaIgnoreFirst();
                    writer.Write(member.EncodedJsonName);
                    writer.Write(':');
                    args.WriterContainer.GetNullWriter().Write(null, args);
                }
                else if (member.MustFormat)
                {
                    comma.AppendCommaIgnoreFirst();
                    writer.Write(member.EncodedJsonName);
                    writer.Write(':');
                    args.WriterContainer.GetWriter <string>().Write(((IFormattable)value).ToString(member.FormatString, member.FormatProvider), args);
                }
                else
                {
                    Write(ref comma, member, value, args);
                }
            }
            args.EndObject();
        }
Ejemplo n.º 28
0
 public void Write(object obj, JsonWriterArgs args)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 29
0
        /// <exception cref="TypeLoadException"> <seealso cref="IConvertible.GetTypeCode" /> 返回值错误 </exception>
        public void Write(object obj, JsonWriterArgs args)
        {
            var value    = (IConvertible)obj;
            var typecode = value.GetTypeCode();

            switch (typecode)
            {
            case TypeCode.Decimal:
                args.WriterContainer.GetWriter <decimal>().Write(value.ToDecimal(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Double:
                args.WriterContainer.GetWriter <double>().Write(value.ToDouble(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Single:
                args.WriterContainer.GetWriter <float>().Write(value.ToSingle(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Int16:
                args.WriterContainer.GetWriter <short>().Write(value.ToInt16(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Int32:
                args.WriterContainer.GetWriter <int>().Write(value.ToInt32(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Int64:
                args.WriterContainer.GetWriter <long>().Write(value.ToInt64(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.SByte:
                args.WriterContainer.GetWriter <sbyte>().Write(value.ToSByte(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Byte:
                args.WriterContainer.GetWriter <sbyte>().Write(value.ToByte(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.UInt16:
                args.WriterContainer.GetWriter <ushort>().Write(value.ToUInt16(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.UInt32:
                args.WriterContainer.GetWriter <uint>().Write(value.ToUInt32(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.UInt64:
                args.WriterContainer.GetWriter <uint>().Write(value.ToUInt64(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Object:
                obj = value.ToType(typeof(object), CultureInfo.InvariantCulture);
                if (obj == null || obj is DBNull)
                {
                    args.WriterContainer.GetNullWriter().Write(null, args);
                }
                else
                {
                    args.WriterContainer.GetWriter <object>().Write(obj, args);
                }
                break;

            case TypeCode.Empty:
            case TypeCode.DBNull:
                args.WriterContainer.GetNullWriter().Write(null, args);
                break;

            case TypeCode.Boolean:
                args.WriterContainer.GetWriter <bool>().Write(value.ToBoolean(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.Char:
                args.WriterContainer.GetWriter <char>().Write(value.ToChar(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.DateTime:
                args.WriterContainer.GetWriter <DateTime>()
                .Write(value.ToDateTime(CultureInfo.InvariantCulture), args);
                break;

            case TypeCode.String:
                args.WriterContainer.GetWriter <string>().Write(value.ToString(CultureInfo.InvariantCulture), args);
                break;

            default:
                throw new TypeLoadException($"TypeCode:{typecode} 未知");
            }
        }
Ejemplo n.º 30
0
 public void Write(object obj, JsonWriterArgs args) => args.WriterContainer.GetWriter <T>().Write(obj, args);