public override bool ПопыткаНайтиПодчиненный(string имя, out УзелМетаданных узел) { if (base.ПопыткаНайтиПодчиненный(имя, out узел)) { return(true); } if (this.checkCache) { ИКешМетаданных кеш = this.Корень().Кеш; string xmlМетаданные; if (кеш != null && кеш.ПопыткаПолучитьЗначение(this.Путь() + "." + имя, out xmlМетаданные)) { узел = ((MetadataNode)УзелМетаданных.ОбъектИзXML(xmlМетаданные, this.soapType)).GetValue(this); return(true); } IEnumerable <string> именаПодчиненных = this.GetDynamicMemberNames(); if (именаПодчиненных.Contains(имя, StringComparer.OrdinalIgnoreCase)) { this.Корень().Загрузить(String.Format("{0}.{1}", this.Путь(), имя)); return(this.ПопыткаНайтиПодчиненный(имя, out узел)); } } узел = null; return(false); }
public override IEnumerable <string> GetDynamicMemberNames() { if (!this.checkCache) { return(base.GetDynamicMemberNames()); } if (this.childrenNames != null) { return(this.childrenNames); } // пытаемся получить из кеша ИКешМетаданных кеш = this.Корень().Кеш; if (кеш != null) { string именаXML; if (кеш.ПопыткаПолучитьЗначение("#list." + this.Путь(), out именаXML)) { this.childrenNames = УзелМетаданных.ОбъектИзXML <string[]>(именаXML); return(this.childrenNames); } } // пытаемся загрузить с сервера Соответствие картаИмен = this.Корень().ПолучитьИменаОбъектовКоллекций(this.Путь()); Массив именаВрем = картаИмен[this.Путь()] as Массив; if (именаВрем != null) { string[] имена = new string[именаВрем.Count]; for (int i = 0; i < именаВрем.Count; i++) { имена[i] = (string)именаВрем[i]; } this.childrenNames = имена; if (кеш != null) { кеш.УстановитьЗначение("#list." + this.Путь(), УзелМетаданных.ОбъектВXML(имена)); } return(this.childrenNames); } throw new Exception(String.Format("Не удалось получить имена подчиненых узлов для коллекции \"{0}\"", this.Путь())); }