private static bool IsStringType(DynamicExtendableObject member) { if (!HasObjectValue(member)) { return false; } return member.ObjectValue.GetType() == typeof(string); }
private static void AddChildElements(XElement parentElement, DynamicExtendableObject dynamicObject) { IEnumerable values = dynamicObject.ObjectValue as IEnumerable; foreach (var item in values) { XElement element = new XElement(dynamicObject.ObjectName, item); parentElement.Add(element); } }
public static bool HasDynamicExtendableObjectValue(DynamicExtendableObject member) { if (!HasObjectValue(member)) { return false; } return member.ObjectValue.GetType() == typeof(DynamicExtendableObject); }
public static bool HasEnumerableExtendableObjectValue(DynamicExtendableObject member) { if (!HasObjectValue(member)) { return false; } IEnumerable obj = member.ObjectValue as IEnumerable<DynamicExtendableObject>; return obj != null; }
public static bool HasEnumerableValue(DynamicExtendableObject member) { if (IsStringType(member)) { return false; } IEnumerable obj=member.ObjectValue as IEnumerable; return obj != null; }
private static void AddXmlElement(XElement parentElement, DynamicExtendableObject dynamicObject) { foreach (DynamicExtendableObject obj in dynamicObject.Members) { XElement element = AddNewChildElement(parentElement, obj); if (element != null) { AddXmlElement(element, obj); } } }
public override bool TrySetMember(SetMemberBinder binder, object value) { DynamicExtendableObject obj = this.Members.FindLast(p => p.ObjectName == binder.Name); if (obj != null) { obj.ObjectValue = value; return true; } DynamicExtendableObject item = new DynamicExtendableObject(binder.Name, value); item.Container = this; this.Members.Add(item); return true; }
public override bool TryGetMember(GetMemberBinder binder, out object result) { DynamicExtendableObject obj = this.Members.FindLast(p => p.ObjectName == binder.Name); if (obj != null) { result = obj.ObjectValue; return true; } DynamicExtendableObject item = new DynamicExtendableObject(binder.Name, null); item.ObjectValue = item; item.Container = this; this.Members.Add(item); result = item; return true; }
private static XElement AddNewChildElement(XElement parentElement, DynamicExtendableObject member) { if (DynamicObjectHelper.HasDynamicExtendableObjectValue(member)) { if (member.Members.Count == 0) { XElement element = new XElement(member.ObjectName); parentElement.Add(element); dynamic currentObj = member.ObjectValue as DynamicExtendableObject; element.Add(ToXml(currentObj)); return null; } else { XElement element = new XElement(member.ObjectName); parentElement.Add(element); return element; } } if (DynamicObjectHelper.HasEnumerableExtendableObjectValue(member)) { XElement element = new XElement(member.ObjectName); parentElement.Add(element); IEnumerable objects = member.ObjectValue as IEnumerable<DynamicExtendableObject>; foreach (DynamicExtendableObject item in objects) { element.Add(ToXml(item)); } return element; } if (DynamicObjectHelper.HasEnumerableValue(member)) { AddChildElements(parentElement, member); } else { XElement element = new XElement(member.ObjectName, member.ObjectValue); parentElement.Add(element); } return null; }
public static XElement ToXml(DynamicExtendableObject dynamicObject) { XElement parentElement = new XElement(dynamicObject.ObjectName); AddXmlElement(parentElement, dynamicObject); return parentElement; }
private static bool HasObjectValue(DynamicExtendableObject member) { return (member != null) && (member.ObjectValue != null); }