コード例 #1
0
        public IValue ReadXdto(IXdtoValue xdtoObject)
        {
            var t = xdtoObject.XmlType();

            if (deserializers.ContainsKey(t))
            {
                var d = deserializers [t];
                return(d.DeserializeXdto(xdtoObject));
            }
            var xdtoType = XdtoFactory.Type(t);

            if (xdtoType == null)
            {
                throw new XdtoException(String.Format("Не поддерживается сериализация для {0}", t));
            }

            // TODO: Значения XDTO не из примитивных типов
            if (xdtoType is XdtoValueType)
            {
                var baseType = (xdtoType as XdtoValueType).BaseType;
                t = new XmlDataType(baseType.Name, baseType.NamespaceUri);
                if (deserializers.ContainsKey(t))
                {
                    var d = deserializers [t];
                    return(d.DeserializeXdto(xdtoObject));
                }
            }

            if (xdtoType is XdtoObjectType)
            {
                return(xdtoObject as XdtoDataObject);
            }

            throw new XdtoException(String.Format("Не поддерживается сериализация для {0}", t));
        }
コード例 #2
0
 public IValue DeserializeXdto(IXdtoValue xdtoValue)
 {
     if (xdtoValue is XdtoDataValue)
     {
         return((xdtoValue as XdtoDataValue).Value);
     }
     throw new NotImplementedException();
 }
コード例 #3
0
        public void Add(XmlFormEnum form, string namespaceUri, string localName, IXdtoValue dataElement)
        {
            if (_type?.Open ?? true)
            {
                var customProperty = new XdtoProperty(null, this, form, namespaceUri, localName);
                Add(customProperty, dataElement);
            }

            throw new RuntimeException("Добавлять можно только в объекты открытого типа!");
        }
コード例 #4
0
        public void Add(string name, IXdtoValue dataElement)
        {
            var property = Properties().Get(name);

            if (property == null)
            {
                throw new RuntimeException(String.Format("Свойство не найдено: {0}", name));
            }

            Add(property, dataElement);
        }
コード例 #5
0
        public void WriteXml(XmlWriterImpl xmlWriter,
                             IXdtoValue value,
                             string localName,
                             string namespaceUri = null,
                             XmlTypeAssignmentEnum?typeAssignment = null,
                             XmlFormEnum?xmlForm = null)
        {
            xmlForm        = xmlForm ?? XmlFormEnum.Element;
            typeAssignment = typeAssignment ?? XmlTypeAssignmentEnum.Implicit;

            if (xmlForm == XmlFormEnum.Element)
            {
                xmlWriter.WriteStartElement(localName, namespaceUri);

                if (typeAssignment == XmlTypeAssignmentEnum.Implicit)
                {
                    WriteTypeAttribute(xmlWriter, ValueFactory.Create(value));
                }

                if (value == null)
                {
                    xmlWriter.WriteAttribute("nil", XmlNs.xsi, "true");
                }
                else if (value is XdtoDataObject)
                {
                    WriteXdtoObject(xmlWriter, value as XdtoDataObject);
                }
                else if (value is XdtoDataValue)
                {
                    var dataValue = value as XdtoDataValue;
                    xmlWriter.WriteText(dataValue.LexicalValue);
                }
                else
                {
                    xmlWriter.WriteText(value.ToString());
                }

                xmlWriter.WriteEndElement();
            }
            else if (xmlForm == XmlFormEnum.Attribute)
            {
                xmlWriter.WriteAttribute(localName, namespaceUri, value.ToString());
            }
            else if (xmlForm == XmlFormEnum.Text)
            {
                xmlWriter.WriteText(value.ToString());                   // TODO: XmlString ??
            }
            else
            {
                throw new NotSupportedException("Какой-то новый тип для XML");
            }
        }
コード例 #6
0
        public void Add(XdtoProperty property, IXdtoValue dataElement)
        {
            XdtoList list;

            if (_data.ContainsKey(property))
            {
                list = _data [property] as XdtoList;
                if (list == null)
                {
                    list             = new XdtoList(this, property);
                    _data [property] = list;
                }
            }
            else
            {
                list             = new XdtoList(this, property);
                _data [property] = list;
            }

            list.Add(ValueFactory.Create(dataElement));
        }
コード例 #7
0
 public XdtoSequenceValueElement(XdtoProperty property, IXdtoValue value)
 {
     Value = value;
 }