/// <summary> /// Десериализует документ /// </summary> /// <param name="xmlDoc">Строка содержащая xml сериализованного документа</param> /// <returns>Список Документов восстановленных из xml</returns> public IList <Doc> DeSerialize(string xmlDoc) { var xDocument = XDocument.Parse(xmlDoc); var docList = new List <Doc>(); if (xDocument.Root == null) { return(docList); } foreach (XElement xElementDoc in xDocument.Root.Elements()) { XAttribute xDocId = xElementDoc.Attribute("Id"); XAttribute xDocName = xElementDoc.Attribute("Name"); if (xDocId == null && xDocName == null) { throw new ApplicationException("Тип документа не указан"); } DocDef docDef = xDocId == null? _docDefRepository.DocDefByName(xDocName.Value) : _docDefRepository.DocDefById(Guid.Parse(xDocId.Value)); var doc = new Doc { Id = Guid.NewGuid(), DocDef = docDef, Attributes = new List <AttributeBase>() }; foreach (XElement xElementAttr in xElementDoc.Elements()) { XAttribute xElementId = xElementAttr.Attribute("Id"); XAttribute xElementName = xElementAttr.Attribute("Name"); if (xElementId == null && xElementName == null) { throw new ApplicationException("Невозможно определить атрибут"); } var atr = xElementId == null ? _attributeRepository.CreateAttribute(docDef.GetByName(xElementName.Value)) : _attributeRepository.CreateAttribute(docDef.GetById(Guid.Parse(xElementId.Value))); // _attributeRepository.GetAttributeByName(xElementName.Value, doc.DocDef.Id) : // _attributeRepository.GetAttributeById(Guid.Parse(xElementId.Value), Guid.Empty); int typeId = atr.AttrDef.Type.Id; switch (typeId) { case (short)CissaDataType.Enum: var enumId = atr.AttrDef.EnumDefType.Id; atr.ObjectValue = _enumRepository.GetEnumValueId(enumId, xElementAttr.Value); break; case (short)CissaDataType.Doc: break; case (short)CissaDataType.DocList: break; default: atr.ObjectValue = xElementAttr.Value; break; } //string attributeDefId = xElementAttr.Attribute("Id").Value; //string attributeDefName = xElementAttr.Attribute("AttributeDefName").Value; doc.Attributes.Add(atr); } docList.Add(doc); } return(docList); }