static void TestParent()
		{
			dynamic obj = new ElasticObject();
			obj.A = "1";

			var parent = obj.A["$parent"];
		}
예제 #2
0
        private static XElement XElementFromElastic(ElasticObject elastic)
        {
            var exp = new XElement(elastic.InternalName);

            foreach (var a in elastic.Attributes)
            {
                if (a.Value.InternalValue != null)
                {
                    exp.Add(new XAttribute(a.Key, a.Value.InternalValue));
                }
            }

            if (elastic.InternalContent is string)
            {
                exp.Add(new XText(elastic.InternalContent as string));
            }

            foreach (var c in elastic.Elements)
            {
                var child = XElementFromElastic(c);
                exp.Add(child);
            }

            return(exp);
        }
예제 #3
0
        /// <summary>
        /// Build an expando from an XElement
        /// </summary>
        /// <param name="el"></param>
        /// <returns></returns>
        public static ElasticObject ElasticFromXElement(XElement el)
        {
            var exp = new ElasticObject();

            if (!string.IsNullOrEmpty(el.Value))
            {
                exp.InternalValue = el.Value;
            }

            exp.InternalName = el.Name.LocalName;

            foreach (var a in el.Attributes())
            {
                exp.CreateOrGetAttribute(a.Name.LocalName, a.Value);
            }


            var textNode = el.Nodes().FirstOrDefault();

            if (textNode is XText)
            {
                exp.InternalContent = textNode.ToString();
            }

            foreach (var c in el.Elements())
            {
                var child = ElasticFromXElement(c);
                child.InternalParent = exp;
                exp.AddElement(child);
            }
            return(exp);
        }
예제 #4
0
        public void Test_Array_SerializeToJson()
        {
            dynamic o = new ElasticObject();

            o.Array = new string[] { "hello", "mom" };
            var s = JsonConvert.SerializeObject(o);
        }
		static void TestDynamicMemberAccess()
		{
			dynamic obj = new ElasticObject();
			obj.A = "A";

			var a = obj["A"];
		}
		static void TestValue()
		{
			dynamic obj = new ElasticObject();
			obj.A = "1";

			var parent = obj.A["$value"];
		}
        /// <summary>
        /// A private helper method
        /// </summary>
        /// <returns></returns>
        private dynamic CreateStoreObject()
        {
            dynamic store = new ElasticObject("Store");

            store.Name             = "Acme Store";
            store.Location.Address = "West Avenue, Heaven Street Road, LA";
            store.Products.Count   = 2;

            store.Owner.FirstName  = "Jack";
            store.Owner.SecondName = "Jack";

            //try to set the internal content for an element
            store.Owner <<= "this is some internal content for owner";

            //Add a new product
            var p1 = store.Products.Product();

            p1.Name  = "Acme Floor Cleaner";
            p1.Price = 20;

            //Add another product
            var p2 = store.Products.Product();

            p2.Name  = "Acme Bun";
            p2.Price = 22;

            return(store);
        }
		static void TestType()
		{
			dynamic obj = new ElasticObject();
			obj.A = "1";

			Type type = obj.A["$type"];
		}
        public void Check_Nested_Objects_Traversing()
        {
            dynamic model = new ElasticObject();
            var     c1    = model.@class();

            c1.name = "Class1";
            var p = c1.property();

            p.name = "Property1";
            p.type = "string";
            p      = c1.property();
            p.name = "Property1";
            p.type = "string";

            var c2 = model.@class();

            p       = c2.property();
            c2.name = "Class2";
            p.name  = "Property1";
            p.type  = "string";
            p       = c2.property();
            p.name  = "Property1";
            p.type  = "string";

            Assert.AreEqual(model["class"].Count, 2);
            Assert.AreEqual(model["class"][0]["property"].Count, 2);
        }
예제 #10
0
        public void Test_serialize_to_json()
        {
            dynamic o = new ElasticObject();

            o.Property1 = "foo";
            o.Property2 = "bar";
            var s = JsonConvert.SerializeObject(o);
        }
        static void TestPath()
        {
            dynamic obj = new ElasticObject();
            obj.A = "1";
            obj.A.B = 0;

            var path = obj.A.B["$path"];
        }
        static void TestRoot()
        {
            dynamic obj = new ElasticObject();
            obj.A = "1";
            obj.A.B = 0;

            var root = obj.A.B["$root"];
        }
		static void TestConvert()
		{
			dynamic obj = new ElasticObject(1);
			Int32 i = obj;
			Single f = obj;
			String s = obj;
			DayOfWeek dow = obj;
			Boolean b = obj;
		}
예제 #14
0
        public void Test_Array_DeserializeFromJson3()
        {
            dynamic o = new ElasticObject();

            o.Array = new object[] { new { Foo = "123" }, "mom", 1, TimeSpan.FromMinutes(1), };
            var s = JsonConvert.SerializeObject(o);

            o = JsonConvert.DeserializeObject <ElasticObject>(s);
            Assert.IsTrue(o.Array is object[]);
        }
예제 #15
0
        public void Test_Array_DeserializeFromJson2()
        {
            dynamic o = new ElasticObject();

            o.Array = new object[] { "hello", "mom", 1 };
            var s = JsonConvert.SerializeObject(o);

            o = JsonConvert.DeserializeObject <ElasticObject>(s);
            Assert.IsTrue(o.Array is object[]);
        }
		public override Object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
		{
			dynamic obj = new ElasticObject();

			foreach (var key in propertyValues.Keys)
			{
				obj[key.ToString()] = propertyValues[key];
			}

			return (obj);
		}
예제 #17
0
        public void Test_serialize_invalid_property_name_with_old_xml()
        {
            dynamic o = new ElasticObject();

            o["000"] = "foo";
            var s = new DataContractSerializer(typeof(ElasticObject));
            var m = new XmlDocument();

            using (var w = m.CreateNavigator().AppendChild())
                s.WriteObject(w, o);
        }
예제 #18
0
        public void Test_serialize_invalid_property_name()
        {
            dynamic o = new ElasticObject();

            o["000"] = "foo";
            var s = new DataContractSerializer(typeof(ElasticObject));
            var m = new XDocument();

            using (var w = m.CreateWriter())
                s.WriteObject(w, o);
        }
        public void Check_The_LeftShift_Operator_Can_Add_An_Element_By_Name()
        {
            dynamic myobj = new ElasticObject("MyObject");

            for (int i = 0; i < 10; i++)
            {
                var newItem = myobj << "Item";
                newItem.CountNumber = i;
            }

            Assert.AreEqual(10, myobj["Item"].Count);
        }
예제 #20
0
        public void Test_serialize_to_xml()
        {
            dynamic o = new ElasticObject();

            o.Property1 = "foo";
            o.Property2 = "bar";
            var s = new DataContractSerializer(typeof(ElasticObject));
            var m = new XDocument();

            using (var w = m.CreateWriter())
                s.WriteObject(w, o);
        }
예제 #21
0
        public void Test_Array_SerializeToXml()
        {
            dynamic o = new ElasticObject();

            o.Array = new string[] { "hello", "mom" };
            o.Foo   = new int[] { 1, 2, 3 };
            var s = new DataContractSerializer(typeof(ElasticObject));
            var m = new XDocument();

            using (var w = m.CreateWriter())
                s.WriteObject(w, o);
        }
예제 #22
0
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            dynamic frameworkInfo = new ElasticObject("Framework");

            frameworkInfo.Version = WebConstants.FrameworkVersion;

            var config = ConfigManager.GetConfig(true);

            frameworkInfo.SiteName      = config.Application.Name;
            frameworkInfo.CopyrightText = config.Application.CopyrightText;

            filterContext.Controller.ViewBag.Framework = frameworkInfo;
        }
예제 #23
0
        public void Test_deserialize_from_json()
        {
            dynamic o = new ElasticObject();

            o.Property1 = "foo";
            o.Property2 = "bar";
            var s = JsonConvert.SerializeObject(o);

            o = JsonConvert.DeserializeObject <ElasticObject>(s);
            Assert.IsNotNull(o);
            Assert.AreEqual("foo", o.Property1);
            Assert.AreEqual("bar", o.Property2);
        }
        public void Check_The_Object_Indexer_Can_Accept_Integers()
        {
            dynamic myobj = new ElasticObject("MyObject");

            for (int i = 0; i < 10; i++)
            {
                var newItem = myobj << "Item";
                newItem.CountNumber = i;
            }

            //Check the 3rd and 9th items
            Assert.AreEqual(3, myobj[3].CountNumber);
            Assert.AreEqual(9, myobj[9].CountNumber);
        }
        public void Check_The_LessThan_Operator_Can_Add_An_Attribute_By_Name()
        {
            dynamic myobj = new ElasticObject("MyObject");

            for (int i = 0; i < 10; i++)
            {
                var newItem = myobj < "Attrib" + i;
                newItem <<= "somevalue";
            }

            //Few random checks

            Assert.AreEqual(myobj.Attrib1, "somevalue");
            Assert.AreEqual(myobj.Attrib8, "somevalue");
        }
        public void Check_Named_Parameters()
        {
            dynamic model = new ElasticObject();
            var     c1    = model.@class(new { name = "Class1" });

            c1.property(new { name = "Property1", type = "string" });
            c1.property(new { name = "Property2", type = "string" });
            var c2 = model.@class(new { name = "Class2" });

            c2.property(new { name = "Property1", type = "string" });
            c2.property(new { name = "Property2", type = "string" });

            Assert.AreEqual(model["class"].Count, 2);
            Assert.AreEqual(model["class"][0]["property"].Count, 2);
        }
예제 #27
0
        public void Test_deserialize_from_xml()
        {
            dynamic o = new ElasticObject();

            o.Property1 = "foo";
            o.Property2 = "bar";
            var s = new DataContractSerializer(typeof(ElasticObject));
            var m = new XDocument();

            using (var w = m.CreateWriter())
                s.WriteObject(w, o);
            o = s.ReadObject(m.CreateReader());
            Assert.IsNotNull(o);
            Assert.AreEqual("foo", o.Property1);
            Assert.AreEqual("bar", o.Property2);
        }
        public void Check_The_Indexer_Take_A_Delegate()
        {
            dynamic myobj = new ElasticObject("MyObject");

            for (int i = 0; i < 10; i++)
            {
                var newItem = myobj << "Item";
                newItem.CountNumber = i;
            }

            var filter = new Func <dynamic, bool>((obj) => obj.CountNumber > 5);
            var result = myobj[filter];

            //4 items remains above 5
            Assert.AreEqual(4, result.Count);
        }
        public void Check_The_Element_And_Attributes_Can_Be_Added_Using_Operators()
        {
            dynamic myobj = new ElasticObject("MyObject");

            var attrib1 = (myobj << "element") < "attribute1";

            attrib1 <<= "hello1";
            var attrib2 = (myobj << "element") < "attribute1";

            attrib2 <<= "hello2";

            //first element
            Assert.AreEqual(myobj[0].attribute1, "hello1");

            //second element
            Assert.AreEqual(myobj[1].attribute1, "hello2");
        }
예제 #30
0
        /// <summary>
        /// Returns an XElement from an ElasticObject
        /// </summary>
        /// <param name="elastic"></param>
        /// <param name="nameSpace"></param>
        /// <returns></returns>
        public static XElement XElementFromElastic(ElasticObject elastic, XNamespace nameSpace = null)
        {
            // we default to empty namespace
            nameSpace = nameSpace ?? string.Empty;
            var exp = new XElement(nameSpace + elastic.InternalName);


            foreach (var a in elastic.Attributes)
            {
                if (a.Value.InternalValue != null)
                {
                    // if we have xmlns attribute add it like XNamespace instead of regular attribute
                    if (a.Key.Equals("xmlns", StringComparison.OrdinalIgnoreCase))
                    {
                        nameSpace = a.Value.InternalValue.ToString();
                        exp.Name  = nameSpace.GetName(exp.Name.LocalName);
                    }
                    else
                    {
                        exp.Add(new XAttribute(a.Key, a.Value.InternalValue));
                    }
                }
            }

            if (null != elastic.InternalContent && elastic.InternalContent is string)
            {
                exp.Add(new XText(elastic.InternalContent as string));
            }

            foreach (var c in elastic.Elements)
            {
                // for child element add current XNamespace
                var child = XElementFromElastic(c, nameSpace);
                exp.Add(child);
            }
            return(exp);
        }
		static void TestBinaryOperations()
		{
			dynamic obj = new ElasticObject(1);
			Boolean b1 = obj == 1;
			Boolean b2 = obj != null;
		}
		public ElasticObjectTypeDescriptor(Object instance)
		{
			this.instance = instance as ElasticObject;
		}
		static void TestUnaryOperations()
		{
			dynamic obj = new ElasticObject(1);
			Int32 n = ~obj;
			Int32 prei = ++obj;
			Int32 pred = --obj;
			Int32 posi = obj++;
			Int32 posd = obj--;
		}
		static void TestTypeDescriptor()
		{
			dynamic obj = new ElasticObject();
			obj.Name = "ricardo";
			var provider = TypeDescriptor.GetProvider(obj) as TypeDescriptionProvider;
			var descriptor = provider.GetTypeDescriptor(obj) as ICustomTypeDescriptor;
			var converter = descriptor.GetConverter() as TypeConverter;
			var attrs = TypeDescriptor.GetAttributes(obj);
			var props = TypeDescriptor.GetProperties(obj) as PropertyDescriptorCollection;
			var prop = props["Name"] as PropertyDescriptor;
			var value = prop.GetValue(obj);
		}
		static void TestNotifyPropertyChanged()
		{
			dynamic obj = new ElasticObject();
			(obj as INotifyPropertyChanged).PropertyChanged += (s, e) =>
				{
					e.ToString();
				};
			obj.Name = "ricardo";
		}
		static void TestAnonymous()
		{
			dynamic obj = new ElasticObject(new { A = 1 });
			Int32 i = obj.A;
		}
		static void TestDeepMembers()
		{
			dynamic obj = new ElasticObject();
			obj.A = 1;
			obj.A.B = "1";
		}
		static void TestImmediateMembers()
		{
			dynamic obj = new ElasticObject();
			obj.A = "1";
		}
예제 #39
0
 /// <summary>
 /// Converts an expando to XElement
 /// </summary>
 /// <param name="e"></param>
 /// <returns></returns>
 public static XElement ToXElement(this ElasticObject e)
 {
     return((dynamic)XElementFromElastic(e));
 }
		static void TestSerialization()
		{
			var formatter = new BinaryFormatter();
			dynamic obj = new ElasticObject();
			obj.Name = "Ricardo";

			using (var stream = new MemoryStream())
			{
				formatter.Serialize(stream, obj);

				stream.Position = 0;

				obj = formatter.Deserialize(stream) as ElasticObject;
			}
		}
예제 #41
0
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (!value.GetType().IsArray && value.GetType().Name.Contains("AnonymousType")) value = new ElasticObject(value);

        this[binder.Name] = value;
        return true;
    }