Exemple #1
0
 private static dynamic GetObject(JObject jobj)
 {
     var obj = new FriendlyDynamic() as IDictionary<string, object>;
     foreach(var pair in jobj) {
         obj.Add(pair.Key.Replace('-', '_'), GetValue(pair.Value));
     }
     return obj;
 }
Exemple #2
0
        public static dynamic Parse(XDocument xml)
        {
            var result = new FriendlyDynamic() as IDictionary<string, object>;

            var root = xml.Root;
            AddElement(root, result);

            return result;
        }
Exemple #3
0
        public void UndefinedPropertyReturnsNull()
        {
            dynamic obj = new FriendlyDynamic();

            obj.one = "One";

            Assert.AreEqual("One", obj.one);
            Assert.IsNull(obj.two);
        }
        public void UndefinedPropertyReturnsNull()
        {
            dynamic obj = new FriendlyDynamic();

            obj.one = "One";

            Assert.AreEqual("One", obj.one);
            Assert.IsNull(obj.two);
        }
Exemple #5
0
        private static void AddElement(XElement el, IDictionary<string, object> parent)
        {
            var name = el.Name.LocalName;

            // check for multiple elements with the same name and convert to list
            var addToList = parent.ContainsKey(name);
            IList<dynamic> list = null;
            if(addToList) {
                var container = parent[name];
                list = container as IList<dynamic>;
                if(list == null) {
                    // convert to list
                    list = new List<dynamic>(new dynamic[] { container });
                    parent[name] = list;
                }
            }

            if(el.HasElements || el.HasAttributes) { // complex object
                var obj = new FriendlyDynamic() as IDictionary<string, object>;

                if(addToList) {
                    list.Add(obj);
                } else {
                    parent[name] = obj;
                }

                foreach(var attr in el.Attributes()) {
                    obj[attr.Name.LocalName] = attr.Value;
                }

                foreach(var child in el.Elements()) {
                    AddElement(child, obj);
                }

                if(!el.HasElements && !el.IsEmpty) {
                    var valName = Char.IsUpper(name[0]) ? "Text" : "text"; // mimic case
                    obj[valName] = el.Value;
                }
            } else { // simple value
                if(addToList) {
                    list.Add(el.Value);
                } else {
                    parent[name] = el.Value;
                }
            }
        }