コード例 #1
0
        private bool Filter(ValueCopyer valueCopyer)
        {
            var basicType = valueCopyer.TypeCode;

            if ((options & JsonFormatterOptions.IgnoreNull) != 0 &&
                basicType == TypeCode.Empty)
            {
                return(false);
            }

            if ((options & JsonFormatterOptions.IgnoreZero) != 0)
            {
                switch (basicType)
                {
                case TypeCode.SByte:
                    return(valueCopyer.ReadSByte() != 0);

                case TypeCode.Int16:
                    return(valueCopyer.ReadInt16() != 0);

                case TypeCode.Int32:
                    return(valueCopyer.ReadInt32() != 0);

                case TypeCode.Int64:
                    return(valueCopyer.ReadInt64() != 0);

                case TypeCode.Byte:
                    return(valueCopyer.ReadByte() != 0);

                case TypeCode.UInt16:
                    return(valueCopyer.ReadUInt16() != 0);

                case TypeCode.UInt32:
                    return(valueCopyer.ReadUInt32() != 0);

                case TypeCode.UInt64:
                    return(valueCopyer.ReadUInt64() != 0);

                case TypeCode.Single:
                    return(valueCopyer.ReadSingle() != 0);

                case TypeCode.Double:
                    return(valueCopyer.ReadDouble() != 0);

                case TypeCode.Decimal:
                    return(valueCopyer.ReadDecimal() != 0);
                }
            }

            if ((options & JsonFormatterOptions.IgnoreEmptyString) != 0 &&
                basicType == TypeCode.String &&
                valueCopyer.ReadString() == string.Empty)
            {
                return(false);
            }

            return(true);
        }
コード例 #2
0
ファイル: ReadCopyer.cs プロジェクト: zhyzhy782/Swifter.Json
 /// <summary>
 /// 读取一个 UInt32 值。
 /// </summary>
 /// <returns>返回一个 uint 值</returns>
 public uint ReadUInt32()
 {
     dataReader.OnReadValue(key, valueCopyer);
     return(valueCopyer.ReadUInt32());
 }
コード例 #3
0
ファイル: JsonSerializer.cs プロジェクト: zxbe/Swifter
        private bool Filter(ValueCopyer valueCopyer)
        {
            var basicType = valueCopyer.GetBasicType();

            if ((options & JsonFormatterOptions.MultiReferencingNull) != 0 && (basicType == BasicTypes.Array || basicType == BasicTypes.Object))
            {
                var dataReader = (IDataReader)valueCopyer.Value;

                var objectId = GetObjectId(dataReader);

                if (objectId != -1)
                {
                    valueCopyer.DirectWrite(null);

                    basicType = BasicTypes.Null;
                }
            }

            if ((options & JsonFormatterOptions.IgnoreNull) != 0)
            {
                if (basicType == BasicTypes.Null)
                {
                    return(false);
                }
            }

            if ((options & JsonFormatterOptions.IgnoreZero) != 0)
            {
                switch (valueCopyer.GetBasicType())
                {
                case BasicTypes.SByte:
                    return(valueCopyer.ReadSByte() != 0);

                case BasicTypes.Int16:
                    return(valueCopyer.ReadInt16() != 0);

                case BasicTypes.Int32:
                    return(valueCopyer.ReadInt32() != 0);

                case BasicTypes.Int64:
                    return(valueCopyer.ReadInt64() != 0);

                case BasicTypes.Byte:
                    return(valueCopyer.ReadByte() != 0);

                case BasicTypes.UInt16:
                    return(valueCopyer.ReadUInt16() != 0);

                case BasicTypes.UInt32:
                    return(valueCopyer.ReadUInt32() != 0);

                case BasicTypes.UInt64:
                    return(valueCopyer.ReadUInt64() != 0);

                case BasicTypes.Single:
                    return(valueCopyer.ReadSingle() != 0);

                case BasicTypes.Double:
                    return(valueCopyer.ReadDouble() != 0);

                case BasicTypes.Decimal:
                    return(valueCopyer.ReadDecimal() != 0);
                }
            }

            if ((options & JsonFormatterOptions.IgnoreEmptyString) != 0)
            {
                switch (valueCopyer.GetBasicType())
                {
                case BasicTypes.String:
                    return(valueCopyer.ReadString() != "");
                }
            }

            return(true);
        }
コード例 #4
0
        public bool Filter(ValueCopyer valueCopyer)
        {
            var basicType = valueCopyer.TypeCode;

            if (typeof(TMode) == typeof(JsonSerializeModes.ReferenceMode))
            {
                if (basicType == TypeCode.Object && (Options & (JsonFormatterOptions.MultiReferencingNull | JsonFormatterOptions.LoopReferencingNull)) != 0 && valueCopyer.Value is IDataReader dataReader)
                {
                    var reference = GetReference(dataReader);

                    if (reference != null && ((Options & JsonFormatterOptions.MultiReferencingNull) != 0 || IsLoopReferencing(reference)))
                    {
                        valueCopyer.DirectWrite(null);

                        basicType = TypeCode.Empty;
                    }
                }
            }

            if ((Options & JsonFormatterOptions.IgnoreNull) != 0 && basicType == TypeCode.Empty)
            {
                return(false);
            }

            if ((Options & JsonFormatterOptions.IgnoreZero) != 0)
            {
                switch (basicType)
                {
                case TypeCode.SByte:
                    return(valueCopyer.ReadSByte() != 0);

                case TypeCode.Int16:
                    return(valueCopyer.ReadInt16() != 0);

                case TypeCode.Int32:
                    return(valueCopyer.ReadInt32() != 0);

                case TypeCode.Int64:
                    return(valueCopyer.ReadInt64() != 0);

                case TypeCode.Byte:
                    return(valueCopyer.ReadByte() != 0);

                case TypeCode.UInt16:
                    return(valueCopyer.ReadUInt16() != 0);

                case TypeCode.UInt32:
                    return(valueCopyer.ReadUInt32() != 0);

                case TypeCode.UInt64:
                    return(valueCopyer.ReadUInt64() != 0);

                case TypeCode.Single:
                    return(valueCopyer.ReadSingle() != 0);

                case TypeCode.Double:
                    return(valueCopyer.ReadDouble() != 0);

                case TypeCode.Decimal:
                    return(valueCopyer.ReadDecimal() != 0);
                }
            }

            if ((Options & JsonFormatterOptions.IgnoreEmptyString) != 0 &&
                basicType == TypeCode.String &&
                valueCopyer.ReadString() == string.Empty)
            {
                return(false);
            }

            return(true);
        }
コード例 #5
0
        private bool Filter(ValueCopyer valueCopyer)
        {
            var basicType = valueCopyer.TypeCode;

            if ((options & (JsonFormatterOptions.MultiReferencingNull | JsonFormatterOptions.LoopReferencingException | JsonFormatterOptions.LoopReferencingNull)) != 0 &&
                basicType == TypeCode.Object &&
                valueCopyer.Value is IDataReader reader &&
                ContainsOrSaveReference(reader))
            {
                valueCopyer.DirectWrite(null);

                basicType = TypeCode.Empty;
            }

            if ((options & JsonFormatterOptions.IgnoreNull) != 0 &&
                basicType == TypeCode.Empty)
            {
                return(false);
            }

            if ((options & JsonFormatterOptions.IgnoreZero) != 0)
            {
                switch (basicType)
                {
                case TypeCode.SByte:
                    return(valueCopyer.ReadSByte() != 0);

                case TypeCode.Int16:
                    return(valueCopyer.ReadInt16() != 0);

                case TypeCode.Int32:
                    return(valueCopyer.ReadInt32() != 0);

                case TypeCode.Int64:
                    return(valueCopyer.ReadInt64() != 0);

                case TypeCode.Byte:
                    return(valueCopyer.ReadByte() != 0);

                case TypeCode.UInt16:
                    return(valueCopyer.ReadUInt16() != 0);

                case TypeCode.UInt32:
                    return(valueCopyer.ReadUInt32() != 0);

                case TypeCode.UInt64:
                    return(valueCopyer.ReadUInt64() != 0);

                case TypeCode.Single:
                    return(valueCopyer.ReadSingle() != 0);

                case TypeCode.Double:
                    return(valueCopyer.ReadDouble() != 0);

                case TypeCode.Decimal:
                    return(valueCopyer.ReadDecimal() != 0);
                }
            }

            if ((options & JsonFormatterOptions.IgnoreEmptyString) != 0 &&
                basicType == TypeCode.String &&
                valueCopyer.ReadString() == string.Empty)
            {
                return(false);
            }

            return(true);
        }