/// <summary>
/// 将数据转化为JSON
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string ConvertToJson(object value)
{
StringBuilder sb = new StringBuilder();
if (value == null || value is System.DBNull)
{
sb.Append("null");
}
else if (value is System.String || value is System.Char)
{
string temp = value.ToString();
temp = temp.Replace("\\", "\\\\").Replace("\r", "\\r").Replace("\n", "\\n").Replace("\"", "\\\"");
sb.Append("\"");
sb.Append(temp);
sb.Append("\"");
}
else if (value is System.Boolean)
{
sb.Append(value.ToString().ToLower());
}
else if (value is System.Byte ||
value is System.SByte ||
value is System.Int16 ||
value is System.Int32 ||
value is System.Int64 ||
value is System.UInt16 ||
value is System.UInt32 ||
value is System.UInt64 ||
value is System.Double ||
value is System.Single ||
value is System.Decimal)
{
sb.Append(value.ToString());
}
else if (value is System.DateTime)
{
System.DateTime d = (System.DateTime)value;
sb.Append("\"");
sb.Append(d.ToString("yyyy-MM-dd HH:mm:ss"));
sb.Append("\"");
}
else if (value is System.Enum)
{
sb.Append("\"");
sb.Append(value.ToString());
sb.Append("\"");
}
else if (value is System.Collections.IDictionary)
{
System.Collections.IDictionary temp = value as System.Collections.IDictionary;
sb.Append("{");
foreach (System.Collections.DictionaryEntry item in temp)
{
if (sb.Length > 1) sb.Append(", ");
sb.Append(ConvertToJson(item.Key.ToString(), item.Value));
}
sb.Append("}");
}
else if (value is IDictionary<object, object>)
{
IDictionary<object, object> temp = value as IDictionary<object, object>;
sb.Append("{");
foreach (KeyValuePair<object, object> item in temp)
{
if (sb.Length > 1) sb.Append(", ");
sb.Append(ConvertToJson(item.Key.ToString(), item.Value));
}
sb.Append("}");
}
else if (value is IEnumerable)
{
IEnumerable temp = value as IEnumerable;
sb.Append("[");
foreach (object item in temp)
{
if (sb.Length > 1) sb.Append(", ");
sb.Append(ConvertToJson(item));
}
sb.Append("]");
}
else if (value is IEnumerable<object>)
{
IEnumerable<object> temp = value as IEnumerable<object>;
sb.Append("[");
foreach (object item in temp)
{
if (sb.Length > 1) sb.Append(", ");
sb.Append(ConvertToJson(item));
}
sb.Append("]");
}
else if (value is System.Guid)
{
System.Guid temp = (System.Guid)value;
sb.Append("\"");
sb.Append(temp.ToString("D"));
sb.Append("\"");
}
else if (value is System.Uri)
{
System.Uri uri = (System.Uri)value;
sb.Append("\"");
sb.Append(uri.ToString());
sb.Append("\"");
}
else
{
System.Type type = value.GetType();
System.Reflection.PropertyInfo[] properties = type.GetProperties();
sb.Append("{");
foreach (System.Reflection.PropertyInfo pi in properties)
{
string pname = pi.Name;
object pvalue = pi.GetValue(value, null);
if (pname.ToLower().IndexOf("parent") < 0 &&
pname.ToLower().IndexOf("sibling") < 0)
{
if (sb.Length > 1) sb.Append(", ");
sb.Append(ConvertToJson(pname, pvalue));
}
}
sb.Append("}");
}
return sb.ToString();
}
/// <summary>
/// 将一个命名的数据转化为JSON
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static string ConvertToJson(string key, object value)
{
StringBuilder sb = new StringBuilder();
sb.Append("\"");
sb.Append(key.Trim());
sb.Append("\"");
sb.Append(" : ");
sb.Append(ConvertToJson(value));
return sb.ToString();
}