public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result) { var name = binder.Name; // 属性値は _属性名 で取得。文字列として返す。 if (name.StartsWith("_")) { var attName = name.Substring(1); result = element.Attribute(attName).Value; return(true); } var subElements = element.Elements(name).ToList(); // 要素がないときは null 返す。 if (subElements.Count == 0) { result = (string)null; return(true); } // 要素が1個だけの時は素直にその要素を返す。 if (subElements.Count == 1) { var e = subElements[0]; result = new DynamicXml(e); return(true); } // 要素が複数ある時はリストで要素一覧を返す。 var es = subElements.Select(x => new DynamicXml(x)); result = es.ToList(); return(true); }
public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result) { var name = binder.Name; // 属性値は _属性名 で取得。文字列として返す。 if (name.StartsWith("_")) { var attName = name.Substring(1); result = element.Attribute(attName).Value; return true; } var subElements = element.Elements(name).ToList(); // 要素がないときは null 返す。 if (subElements.Count == 0) { result = (string)null; return true; } // 要素が1個だけの時は素直にその要素を返す。 if (subElements.Count == 1) { var e = subElements[0]; result = new DynamicXml(e); return true; } // 要素が複数ある時はリストで要素一覧を返す。 var es = subElements.Select(x => new DynamicXml(x)); result = es.ToList(); return true; }