Example #1
0
        private void _serializeObject(object value)
        {
            //kill requre
            if (_stackOfParents.Contains(value))
            {
                if (_breakRecure)
                {
                    _serialize();
                    return;
                }
                else
                {
                    throw new Exception("Recursion detected");
                }
            }

            _stackOfParents.Push(value);
            _writer.OpenBracket('{');

            var type      = value.GetType();
            var firstItem = true;

            if (_showTypeIdentifier)
            {
                var typeName = _getTypeName(type);
                if (null != typeName)
                {
                    _writer.AddTypeName(_typeIdentifier);
                    _writer.AppendQuoted(typeName);

                    firstItem = false;
                }
            }

            var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);

            foreach (var field in fields)
            {
                _writer.AddComa(firstItem);
                _writer.AppendQuoted(field.Name);
                _writer.AddSeparator();
                _serializeItem(field.GetValue(value));

                firstItem = false;
            }
            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            foreach (var property in properties)
            {
                if (property.CanRead)
                {
                    _writer.AddComa(firstItem);
                    _writer.AppendQuoted(property.Name);
                    _writer.AddSeparator();
                    _serializeItem(property.GetValue(value, null));

                    firstItem = false;
                }
            }

            _writer.CloseBracket('}');
            _stackOfParents.Pop();
        }