protected override void DoWrite(Node node) { switch (node.Type) { case NodeType.CollectionStart: { collectionDepth++; if (collectionDepth == 2) { cols = 0; } break; } case NodeType.CollectionEnd: { if (collectionDepth == 2) { writer.WriteLine(); } collectionDepth--; break; } case NodeType.Value: { cols++; if (cols > 1) { writer.Write(Settings.FieldDelimiter); } if (node.Value != null) { var text = ValueConventions.CreateQuotedText(node.Value, Settings); writer.Write(text); } break; } } }
protected override void DoWrite(Node node) { switch (node.Type) { case NodeType.DocumentStart: { writer.Write("{"); stack.Push(new Children { Parent = NodeType.Document }); break; } case NodeType.DocumentEnd: { stack.Pop(); Indent(); writer.Write("}"); break; } case NodeType.ObjectStart: { if (stack.Any()) { var children = stack.Peek(); if (children.Parent == NodeType.Document) { EmitProperty((node.Value ?? "root").ToString()); } else if (children.Parent == NodeType.Collection) { if (children.Count > 0) { writer.Write(","); } children.Count++; Indent(); } } writer.Write("{"); stack.Push(new Children { Parent = NodeType.Object }); return; } case NodeType.ObjectEnd: { var children = stack.Pop(); if (children.Count > 0) { Indent(); } writer.Write("}"); return; } case NodeType.CollectionStart: { if (stack.Any()) { var children = stack.Peek(); if (children.Parent == NodeType.Document) { EmitProperty((node.Value ?? "root").ToString()); } else if (children.Parent == NodeType.Collection) { if (children.Count > 0) { writer.Write(","); } children.Count++; Indent(); } } writer.Write("["); stack.Push(new Children { Parent = NodeType.Collection }); return; } case NodeType.CollectionEnd: { var children = stack.Pop(); if (children.Count > 0) { Indent(); } writer.Write("]"); return; } case NodeType.PropertyStart: { var children = stack.Peek(); if (children.Count > 0) { writer.Write(","); } children.Count++; EmitProperty((node.Value ?? "property").ToString()); return; } case NodeType.PropertyEnd: { return; } case NodeType.Value: { var children = stack.Peek(); if (children.Parent == NodeType.Collection) { if (children.Count > 0) { writer.Write(","); } children.Count++; Indent(); } var text = ValueConventions.CreateQuotedText(node.Value, Settings, Toolset.Json.Escape); writer.Write(text); return; } } }