Пример #1
0
        /// <summary>
        /// Convert Line Text To <see cref="JsonTag"/>
        /// </summary>
        /// <param name="lineNumber"></param>
        /// <param name="lineText"></param>
        /// <returns></returns>
        private JsonTag GetJsonTagByLineText(int lineNumber, string lineText)
        {
            var cols = lineText.Trim().Split('\t');

            if (cols.Length != 4)
            {
                throw new JsonTagParseException(lineNumber, $"Invalid Json Line Text: {lineText}");
            }
            var jsonTag = new JsonTag();

            jsonTag.Level       = 0;
            jsonTag.TagName     = cols[0].Replace(" ", "").Trim();
            jsonTag.DataType    = cols[1];
            jsonTag.IsRequred   = cols[2].Equals("Y");
            jsonTag.Description = cols[3];

            var colNamePattern = @"([\+]{0,5})([a-zA-Z].*)";
            var match          = Regex.Match(jsonTag.TagName, colNamePattern);

            if (match == null)
            {
                throw new JsonTagParseException(lineNumber, $"Invalid Json Tag: {jsonTag.TagName}");
            }

            if (match.Groups.Count == 1)
            {
                jsonTag.TagName = match.Value;
            }
            else
            {
                jsonTag.Level   = match.Groups[1].Value.Length;
                jsonTag.TagName = match.Groups[2].Value;
            }
            return(jsonTag);
        }
Пример #2
0
        /// <summary>
        /// Convert Doc Text To Json String
        /// </summary>
        private string ConvertToJsonString(string docText)
        {
            var jsonLines  = docText.Split('\n');
            var lineNumber = 0;

            IDictionary <string, object> jsonObject = new Dictionary <string, object>();
            // List<IDictionary<string, object>> jsonObjectTree = new List<IDictionary<string, object>>();
            List <object> jsonObjectTree = new List <object>();

            foreach (var jsonLine in jsonLines)
            {
                lineNumber++;
                if (string.IsNullOrEmpty(jsonLine.Trim()))
                {
                    continue;
                }

                var     jsonTag     = GetJsonTagByLineText(lineNumber, jsonLine);
                JsonTag nextJsonTag = null;
                if (lineNumber < jsonLines.Length)
                {
                    nextJsonTag = GetJsonTagByLineText(lineNumber, jsonLines[lineNumber]);
                }

                if (jsonObjectTree.Count == 0)
                {
                    jsonObjectTree.Add(jsonObject);
                }

                var isArray         = jsonTag.DataType.EndsWith("[]");
                var dataTypeMatches = Regex.Matches(jsonTag.DataType, @"^(string|number|boolean|object)(\[\])?$");
                if (dataTypeMatches.Count == 0)
                {
                    throw new JsonTagParseException(lineNumber, $"Invalid DataType: {jsonTag.DataType}");
                }

                var dataType = dataTypeMatches[0].Value;

                var nextLevelDiff = (nextJsonTag?.Level ?? jsonTag.Level) - jsonTag.Level;

                IDictionary <string, object> currJsonObject;
                if (jsonObjectTree.Last() is IDictionary <string, object> )
                {
                    currJsonObject = jsonObjectTree.Last() as IDictionary <string, object>;
                }
                else
                {
                    currJsonObject = (jsonObjectTree.Last() as List <Dictionary <string, object> >).First();
                }

                if (nextLevelDiff <= 0)
                {
                    if (!isArray)
                    {
                        currJsonObject.Add(jsonTag.TagName, GetJsonTagDescription(jsonTag));
                    }
                    else
                    {
                        currJsonObject.Add(jsonTag.TagName, new string[] { GetJsonTagDescription(jsonTag), "..." });
                    }

                    if (nextLevelDiff < 0)
                    {
                        if (Math.Abs(nextLevelDiff) >= jsonObjectTree.Count())
                        {
                            throw new JsonTagParseException(lineNumber, $"Next Level ({nextLevelDiff}) Greater Then Json Tree Count ({jsonObjectTree.Count()}) ");
                        }

                        for (var i = 0; i < Math.Abs(nextLevelDiff); i++)
                        {
                            jsonObjectTree.Remove(jsonObjectTree.Last());
                        }
                    }
                    continue;
                }

                if (nextLevelDiff > 0 && nextLevelDiff != 1)
                {
                    throw new JsonTagParseException(lineNumber, $"Json Level Error ({nextLevelDiff})");
                }

                if ((!dataType.StartsWith("object")) && (nextLevelDiff > 0))
                {
                    throw new JsonTagParseException(lineNumber, $"Json Tag DataType Must Be [object]");
                }


                if (!isArray)
                {
                    currJsonObject.Add(jsonTag.TagName, new Dictionary <string, object>());
                    jsonObjectTree.Add(currJsonObject[jsonTag.TagName] as Dictionary <string, object>);
                }
                else
                {
                    currJsonObject.Add(jsonTag.TagName, new List <Dictionary <string, object> >());
                    jsonObjectTree.Add(currJsonObject[jsonTag.TagName] as List <Dictionary <string, object> >);
                    (jsonObjectTree.Last() as List <Dictionary <string, object> >).Add(new Dictionary <string, object>());
                }
            }
            return(JsonConvert.SerializeObject(jsonObject));
        }
Пример #3
0
        /// <summary>
        /// Get Json Tag Description Value
        /// </summary>
        /// <param name="jsonTag"></param>
        /// <returns></returns>
        private string GetJsonTagDescription(JsonTag jsonTag)
        {
            var dataType = jsonTag.DataType.TrimEnd('[', ']');

            return($"({dataType}{(jsonTag.IsRequred ? "*" : "")}) {jsonTag.Description}");
        }