使用 JsonLite 获取 JSON AST
class Program
{
static void Main(string[] args)
{
string fileName = $"{AppDomain.CurrentDomain.BaseDirectory}\\json.txt";
//SyntaxTree
using (var stream = File.OpenRead(fileName))
{
JsonObject temp = Json.CreateAst(stream) as JsonObject;
string md = Process(temp);
}
Console.WriteLine("Hello World!");
}
static string Process(JsonObject jsonObject)
{
StringBuilder builder = new StringBuilder();
builder.AppendLine("#### 返回参数");
builder.AppendLine("| 字段 | 类型 | 字段名 | 说明 |");
builder.AppendLine("| ------------ | ------------ | ------------ | ------------ | ------------ | ");
//builder.AppendLine(ProcessFix(jsonObject));
ProcessContent(jsonObject, 0, builder);
return builder.ToString();
}
static string ProcessContent(JsonObject jsonObject, int deep, StringBuilder builder)
{
string format = string.Empty;
if (deep == 0)
format = "|{0}|{1}| ||";
else
{
int paddinLeft = 20 + (deep-1) * 20;
format = "|<span style=\"padding-left: "+paddinLeft.ToString()+"px\">├─ {0}|{1}| | | |";
}
foreach (var item in jsonObject.Members)
{
if (item.Value.GetType() == typeof(JsonNumber))
builder.AppendFormat(format, item.Name, "number");
else if (item.Value.GetType() == typeof(JsonObject))
{
builder.AppendFormat(format, item.Name, "Object");
builder.Append(System.Environment.NewLine);
ProcessContent(item.Value as JsonObject, deep + 1, builder);
}
else if (item.Value.GetType() == typeof(JsonNull))
builder.AppendFormat(format, item.Name, "");
else if (item.Value.GetType() == typeof(JsonBoolean))
builder.AppendFormat(format, item.Name, "bool");
else if (item.Value.GetType() == typeof(JsonString))
builder.AppendFormat(format, item.Name, "string");
else
builder.AppendFormat(format, item.Name, "");
builder.Append(System.Environment.NewLine);
}
return string.Empty;
}
}