예제 #1
0
        protected JsonMemberInfo GetMemberInfo(JsonPath path, JToken data, JsonMemberInfo parent)
        {
            var info = new JsonMemberInfo { Value = data.ToString(), Parent = parent, Path = path };

            if (data.Type == JTokenType.Array)
            {
                info.Children = new SortedDictionary<string, JsonMemberInfo>();
                info.IsArray = true;
                var idx = 0;
                foreach (var entry in ((IList<JToken>)data))
                {
                    var key = idx.ToString(CultureInfo.InvariantCulture);
                    var newPath = new JsonPath { Property = key, IsIndexer = true };
                    newPath.Prev = path.Clone(newPath);
                    info.Children.Add(key, this.GetMemberInfo(newPath, entry, info));
                    idx++;
                }
            }
            if (data.Type == JTokenType.Object)
            {
                info.Children = new SortedDictionary<string, JsonMemberInfo>();
                info.IsObject = true;
                foreach (var entry in ((IDictionary<string, JToken>)data))
                {
                    var newPath = new JsonPath { Property = entry.Key, IsIndexer = false };
                    newPath.Prev = path.Clone(newPath);
                    info.Children.Add(entry.Key, this.GetMemberInfo(newPath, entry.Value, info));
                }
            }
            if (data.Type == JTokenType.Boolean)
            {
                info.Value = Convert.ToBoolean(data.ToString());
            }
            if (data.Type == JTokenType.Float)
            {
                info.Value = Convert.ToDouble(data.ToString());
            }
            if (data.Type == JTokenType.Integer)
            {
                info.Value = Convert.ToInt32(data.ToString());
            }
            if (data.Type == JTokenType.Guid)
            {
                info.Value = new Guid(data.ToString());
            }
            if (data.Type == JTokenType.String)
            {
                info.Value = Convert.ToString(data.ToString());
            }
            if (data.Type == JTokenType.Null)
            {
                info.Value = null;
            }
            if (data.Type == JTokenType.Date)
            {
                info.Value = DateTime.Parse(data.ToString());
            }
            return info;
        }
예제 #2
0
파일: JsonPath.cs 프로젝트: bve/JsonPatch
 public JsonPath Clone(JsonPath next, int level = 0)
 {
     var path = new JsonPath { IsIndexer = this.IsIndexer, Property = this.Property };
     if (next != null)
     {
         path.Next = next.Clone(next.Next, level + 1);
     }
     if (this.Prev != null)
     {
         path.Prev = this.Prev.Clone(path, level - 1);
     }
     if (path.Property == null)
     {
         throw new Exception("AAAAAAAAA");
     }
     return path;
 }