Exemplo n.º 1
0
        private bool WriteSyntaxObjectNode(SyntaxObjectNode Node)
        {
            EnterChunk();
            JsonString_.Push('{');
            JsonString_.Push('\n');

            var Keys = Node.GetKeys();

            for (var Index = 0; Index < Keys.Length; ++Index)
            {
                var Child = Node.GetValue(Keys[Index]);
                WriteChunkTab();
                JsonString_.Push('"');
                JsonString_.PushString(Keys[Index]);
                JsonString_.Push('"');
                JsonString_.PushString(" : ");
                WriteSyntaxNode(Child);
                if (Index != Keys.Length - 1)
                {
                    JsonString_.Push(',');
                }
                JsonString_.Push('\n');
            }

            LeaveChunk();
            WriteChunkTab();
            JsonString_.Push('}');
            return(true);
        }
Exemplo n.º 2
0
        private static JsonObject ParseJsonObjectFromNode(SyntaxObjectNode Node)
        {
            var Keys    = Node.GetKeys();
            var JsonObj = new JsonObject();

            foreach (var Key in Keys)
            {
                var Value = ParseJsonValueFromNode(Node.GetValue(Key));
                JsonObj.SetValue(Key, Value);
            }

            return(JsonObj);
        }
Exemplo n.º 3
0
        private static SyntaxObjectNode ParseNodeFromObject(Type ObjType, object Obj)
        {
            var Node   = new SyntaxObjectNode();
            var Fileds = ObjType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            foreach (var Filed in Fileds)
            {
                var FiledValue = Filed.GetValue(Obj);
                var FiledNode  = ParseNodeFromValue(Filed.FieldType, FiledValue);
                Node.AddChild(Filed.Name, FiledNode);
            }

            return(Node);
        }
Exemplo n.º 4
0
        private SyntaxObjectNode ParseObject()
        {
            if (TokensStream_.Take().Code_ != LanguageDescriptor.JsonObjectBegin)
            {
                Logger.Add(TokensStream_.Peek().Line_, TokensStream_.Peek().Index_, $"expected '{LanguageDescriptor.JsonObjectBegin}' not appeared");
                return(null);
            }

            var Node = new SyntaxObjectNode();

            while (!TokensStream_.IsEnd())
            {
                if (TokensStream_.Peek().Code_ == LanguageDescriptor.JsonObjectEnd)
                {
                    break;
                }

                var Key = ParseKey();
                if (string.IsNullOrWhiteSpace(Key))
                {
                    return(null);
                }

                if (TokensStream_.Take().Code_ != LanguageDescriptor.JsonDefineDelimiter)
                {
                    Logger.Add(TokensStream_.Peek().Line_, TokensStream_.Peek().Index_, $"expected '{LanguageDescriptor.JsonDefineDelimiter}' not appeared");
                    return(null);
                }

                var Value = ParseValue();
                if (Value == null)
                {
                    return(null);
                }

                Node.AddChild(Key, Value);

                if (TokensStream_.Peek().Code_ == LanguageDescriptor.JsonValueDelimiter)
                {
                    TokensStream_.Take();
                }
            }

            TokensStream_.Take();
            return(Node);
        }
Exemplo n.º 5
0
        private static object ParseObjectFromNode(Type ObjType, SyntaxObjectNode Node)
        {
            var Obj  = Activator.CreateInstance(ObjType);
            var Keys = Node.GetKeys();

            foreach (var Key in Keys)
            {
                var Info = ObjType.GetField(Key, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                if (Info == null)
                {
                    continue;
                }

                var ChildValue = ParseValueFromNode(Info.FieldType, Node.GetValue(Key));
                Info.SetValue(Obj, ChildValue);
            }

            return(Obj);
        }