コード例 #1
0
ファイル: SerializationInfo.cs プロジェクト: blqw/blqw.Json
        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);
            }
        }
コード例 #2
0
ファイル: IDictionary.cs プロジェクト: blqw/blqw.Json
        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();
        }
コード例 #3
0
ファイル: IDictionary.cs プロジェクト: blqw/blqw.Json
            /// <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();
            }
コード例 #4
0
ファイル: NameValueCollection.cs プロジェクト: blqw/blqw.Json
        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();
        }
コード例 #5
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();
        }
コード例 #6
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();
        }
コード例 #7
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();
        }
コード例 #8
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();
        }
コード例 #9
0
ファイル: Object.cs プロジェクト: blqw/blqw.Json
 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);
     }
 }
コード例 #10
0
ファイル: DataSet.cs プロジェクト: blqw/blqw.Json
        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();
        }
コード例 #11
0
ファイル: Object.cs プロジェクト: blqw/blqw.Json
        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();
        }