private static CodeTreeNode ParseNode(CodeType parentCodeType, StringSegment nodeCode) { var nv = PreHandle(parentCodeType, nodeCode); var name = nv.Name; var value = nv.Value; CodeTreeNode node; if (CodeTreeNode.IsObject(value)) { value = TrimSign(value); var childs = ParseNodes(CodeType.Object, value); node = new CodeTreeNode(name, value, CodeType.Object, childs); } else if (CodeTreeNode.IsList(value)) { value = TrimSign(value); var childs = ParseNodes(CodeType.List, value); node = new CodeTreeNode(name, value, CodeType.List, childs); } else { var codeType = CodeTreeNode.GetValueType(value); node = new CodeTreeNode(name, value, codeType); } return(node); }
/// <summary> /// 预处理节点代码 /// </summary> /// <param name="nodeCode"></param> /// <param name="name"></param> /// <param name="value"></param> private static NameAndValue PreHandle(CodeType parentCodeType, StringSegment nodeCode) { StringSegment name, value; var code = nodeCode.Trim(); if (CodeTreeNode.IsObject(code) || CodeTreeNode.IsList(code)) { name = StringSegment.Null; value = code; } else { int pos = code.IndexOf(':'); if (parentCodeType == CodeType.Object) { name = pos == -1 ? code : code.Substring(0, pos).Trim(); value = pos == -1 ? StringSegment.Null : code.Substring(pos + 1).Trim(); } else { name = pos == -1 ? StringSegment.Null : code.Substring(0, pos).Trim(); value = pos == -1 ? code : code.Substring(pos + 1).Trim(); } } return(new NameAndValue(name, value)); }
/// <summary> /// 预处理节点代码 /// </summary> /// <param name="nodeCode"></param> /// <param name="name"></param> /// <param name="value"></param> private static NameAndValue PreHandle(CodeType parentCodeType, StringSegment nodeCode) { StringSegment name, value; var code = nodeCode.Trim(); if (CodeTreeNode.IsObject(code) || CodeTreeNode.IsList(code)) { name = StringSegment.Null; value = code; } else { var info = DeserializerUtil.Find(code, 0, ':'); if (parentCodeType == CodeType.Object) { name = !info.Finded ? code : code.Substring(0, info.KeyPosition).Trim(); value = !info.Finded ? StringSegment.Null : code.Substring(info.KeyPosition + 1).Trim(); } else { name = !info.Finded ? StringSegment.Null : code.Substring(0, info.KeyPosition).Trim(); value = !info.Finded ? code : code.Substring(info.KeyPosition + 1).Trim(); } } return new NameAndValue(name, value); }