public static DataStoreConfig Deserialize(XDocument doc) { #region --- Calling Contract... --- if (doc == null) { Error?.Invoke("Document is null!"); return(null); } // XElement dsCfgElem = doc.Element(DsCfgElemNm); if (dsCfgElem == null) { Error?.Invoke($"Document does not contains a <{DsCfgElemNm}> element!"); return(null); } #endregion // DataStoreConfig cfg = new DataStoreConfig(); // Default StagePathDir cfg.DefaultStgDirVal = (dsCfgElem.Element(StgDirElemNm)?.Value); if (string.IsNullOrWhiteSpace(cfg.DefaultStgDirVal)) { Error?.Invoke($"Document does not contains a <{StgDirElemNm}> element!"); } // List of DataStores... XElement dsCollElem = dsCfgElem.Element(DsCollElemNm); if (dsCollElem == null) { Error?.Invoke($"There is no DataStore configuration: <{DsCollElemNm}> element!"); return(cfg); } // IEnumerable <XElement> dsElemList = dsCollElem.Elements(DsElemNm); foreach (XElement dsElem in dsElemList) { DataStore ds = new DataStore(); ds.Name = (dsElem.Attribute(NmAttrNm)?.Value); ds.Active = GetBooleanAttribute((dsElem.Attribute(ActvAttrNm)?.Value), false); ds.LoadDefaultDatabaseOnly = GetBooleanAttribute((dsElem.Attribute(LddoAttrNm)?.Value), false); ds.LoadSystemObjects = GetBooleanAttribute((dsElem.Attribute(LsoAttrNm)?.Value), false); ds.LoadWithFields = GetBooleanAttribute((dsElem.Attribute(WfAttrNm)?.Value), false); ds.StagePathDir = (dsElem.Element(StgDirElemNm)?.Value); if (ds.StagePathDir == null) { ds.StagePathDir = cfg.DefaultStgDirVal; } // XElement csElem = dsElem.Element(CsElemNm); if (csElem == null) { cfg.DataStoreList.Add(ds); continue; } ds.ProviderName = (csElem.Attribute(PnAttrNm)?.Value); ds.ConnectionString = (csElem.Element(ConnStrElemNm)?.Value); cfg.DataStoreList.Add(ds); } if (cfg.DataStoreList.Count == 0) { Warn?.Invoke($"There is no DataStore configuration: <{DsElemNm}> element!"); } // return(cfg); }