static void TestParent() { dynamic obj = new ElasticObject(); obj.A = "1"; var parent = obj.A["$parent"]; }
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); }
/// <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); }
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); }
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; }
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[]); }
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); }
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); }
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); }
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); }
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); }
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; }
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); }
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"); }
/// <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"; }
/// <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; } }
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; }