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(); }