Alba.Jaml.XamlGeneration.XamlGenerator.GetJObjectFromMarkupExt C# (CSharp) Метод

GetJObjectFromMarkupExt() приватный Метод

private GetJObjectFromMarkupExt ( string strMarkup ) : Newtonsoft.Json.Linq.JObject
strMarkup string
Результат Newtonsoft.Json.Linq.JObject
        private JObject GetJObjectFromMarkupExt (string strMarkup)
        {
            JObject result = null;
            XamlNodeStackItem obj, member;
            var posParams = new List<string>();
            var stack = new List<XamlNodeStackItem>();

            foreach (XamlNode node in GetMarkupExtParser().Parse(strMarkup, 0, 0)) {
                switch (node.NodeType) {
                    case XamlNodeType.None:
                        break;

                    case XamlNodeType.StartObject:
                        string ns = FindPrefixByNamespace(node.XamlType.PreferredXamlNamespace);
                        stack.Add(new XamlNodeStackItem(node,
                            new JObject(new JProperty(pnDollar,
                                ns != "" ? string.Format("{0}:{1}", ns, node.XamlType.Name) : node.XamlType.Name))));
                        break;

                    case XamlNodeType.GetObject:
                        throw new NotImplementedException();

                    case XamlNodeType.EndObject:
                        obj = stack.Last();
                        if (stack.Count == 1)
                            result = obj.JObject;
                        stack.RemoveAt(stack.Count - 1);
                        if (stack.Count > 0) {
                            member = stack.Last();
                            if (member.JProperty != null)
                                member.JProperty.Value = FormatJObjectAsMarkupExt(obj.JObject);
                        }
                        break;

                    case XamlNodeType.StartMember:
                        obj = stack.Last(t => t.JObject != null);
                        member = new XamlNodeStackItem(node, new JProperty(node.Member.Name, null));
                        obj.JObject.Add(member.JProperty);
                        stack.Add(member);
                        break;

                    case XamlNodeType.EndMember:
                        member = stack.Last();
                        if (member.JProperty.Name == XamlLanguage.PositionalParameters.Name) {
                            obj = stack.Last(t => t.JObject != null);
                            member.JProperty.Remove();
                            AddPositionalParams(obj, posParams);
                            posParams.Clear();
                        }
                        stack.RemoveAt(stack.Count - 1);
                        break;

                    case XamlNodeType.Value:
                        member = stack.Last();
                        string value = string.Format(CultureInfo.InvariantCulture, "{0}", node.Value);
                        if (member.JProperty.Name == XamlLanguage.PositionalParameters.Name)
                            posParams.Add(value);
                        else
                            member.JProperty.Value = value;
                        break;

                    case XamlNodeType.NamespaceDeclaration:
                        throw new NotImplementedException();

                    default:
                        throw new InvalidOperationException();
                }
            }
            return result;
        }