Esempio n. 1
0
 private static void WriteElement(bool isMultiple, object value, IElementWriter list,
                                  Func <IElementWriter, object, ObjectPropertyInfo> getPropertyFunc,
                                  Action <ObjectPropertyInfo, object> writeAction, Action <bool> nullAction, Action <IList> listAction)
 {
     if (nullAction != null)
     {
         nullAction(false);
     }
     if (isMultiple)
     {
         IList listValue = value.Convert <IList>();
         if (listAction != null)
         {
             listAction(listValue);
         }
         foreach (object itemValue in listValue)
         {
             ObjectPropertyInfo property = getPropertyFunc(list, itemValue);
             if (property != null)
             {
                 writeAction(property, itemValue);
             }
         }
     }
     else
     {
         ObjectPropertyInfo property = getPropertyFunc(list, value);
         if (property != null)
         {
             writeAction(property, value);
         }
     }
 }
Esempio n. 2
0
        private void OnComplete(object sender, EventArgs e)
        {
            var itemWriter = _base as ItemElementWriter;

            if (itemWriter != null)
            {
                _result.AddReadOnly(itemWriter.Result as IReadOnlyItem);
                itemWriter.Complete -= OnComplete;
            }
            else
            {
                var elemWriter = _base as AmlElementWriter;
                if (elemWriter != null)
                {
                    elemWriter.Complete -= OnComplete;
                    var elem = elemWriter.Root;
                    if (elem == null)
                    {
                        throw new InvalidOperationException();
                    }

                    if (elem.Name == "Message")
                    {
                        _result.AddMessageNode(elem);
                    }
                    else
                    {
                        switch (elem.ElementByName("faultcode").Value)
                        {
                        case "0":
                            _result.Exception = new NoItemsFoundException(elem, _database, _query);
                            break;

                        case "1001":
                            if (elem.ElementByName("detail").ElementByName("error_resolution_report").Exists)
                            {
                                _result.Exception = new ValidationReportException(elem, _database, _query);
                            }
                            else
                            {
                                _result.Exception = new ValidationException(elem, _database, _query);
                            }
                            break;

                        default:
                            _result.Exception = new ServerException(elem, _database, _query);
                            break;
                        }
                    }
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }

            _base = null;
        }
Esempio n. 3
0
        public void WriteObjectElement(ObjectElementAttribute attribute, object writer,
                                       object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            JsonTextWriter jsonWriter = writer.Convert <JsonTextWriter>();
            QName          name       = info.QName;

            if (attribute.IsMultiple)
            {
                var list = value.Convert <IEnumerable>();
                if (attribute.UseJsonObject)
                {
                    var            valueList     = EnumUtil.Convert(list);
                    IElementWriter elementWriter = serializerData.Convert <IElementWriter>();
                    var            itemGroup     = from item in valueList
                                                   where item != null
                                                   let propInfo = elementWriter.Get(item.GetType())
                                                                  group new { Item = item, Info = propInfo } by propInfo.LocalName;
                    foreach (var group in itemGroup)
                    {
                        jsonWriter.WritePropertyName(group.Key);
                        jsonWriter.WriteStartArray();
                        foreach (var item in group)
                        {
                            WriteAObject(writer, item.Item, item.Info.ModelName, settings, jsonWriter);
                        }
                        jsonWriter.WriteEndArray();
                    }
                    //foreach (object itemValue in list)
                    //{
                    //    if (itemValue == null)
                    //        continue;
                    //    var subPropertyInfo = elementWriter.Get(itemValue.GetType());
                    //    jsonWriter.WritePropertyName(subPropertyInfo.LocalName);
                    //    WriteAObject(writer, itemValue, subPropertyInfo.ModelName, settings, jsonWriter);
                    //}
                }
                else
                {
                    if (info.WriteMode == SerializerWriteMode.WriteName)
                    {
                        jsonWriter.WritePropertyName(name.LocalName);
                    }
                    jsonWriter.WriteStartArray();
                    foreach (var itemValue in list)
                    {
                        Write(writer, itemValue, info.ModelName, settings, name, serializerData, null);
                    }
                    jsonWriter.WriteEndArray();
                }
            }
            else
            {
                jsonWriter.WritePropertyName(name.LocalName);
                Write(writer, value, info.ModelName, settings, name, serializerData, null);
            }
        }
Esempio n. 4
0
        public override void WriteStartElement(string prefix, string localName, string ns)
        {
            _value     = null;
            _inElement = true;
            var name = GetName(localName, ns);

            if (_base != null)
            {
                _base.WriteStartElement(name);
            }
            else
            {
                switch (name)
                {
                case "Item":
                    if (_names.Count < 1 || _names.Peek() != "Message")
                    {
                        _base = new ItemElementWriter(_factory)
                        {
                            ReadOnly = _readOnly
                        };
                        _base.Complete += OnComplete;
                        _base.WriteStartElement(name);
                    }
                    break;

                case "SOAP-ENV:Fault":
                    _base = new AmlElementWriter(_factory)
                    {
                        ReadOnly = _readOnly
                    };
                    _base.Complete += OnComplete;
                    _base.WriteStartElement(name);
                    break;

                case "Message":
                    _base = new AmlElementWriter(_factory)
                    {
                        ReadOnly = _readOnly
                    };
                    _base.Complete += OnComplete;
                    _base.WriteStartElement(name);
                    break;

                case "Result":
                    _resultText = new StringBuilder();
                    break;
                }
                _names.Push(name);
            }
        }
 public ElementWriterTests()
 {
     _elementWriter = new ElementWriter();
 }