Beispiel #1
0
        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;
            }
            }
        }
Beispiel #2
0
        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;
            }
            }
        }