Esempio n. 1
0
        public void ReadTagElement(TagElementAttribute attribute, object reader,
                                   object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            JsonTextReader jsonReader = reader.Convert <JsonTextReader>();

            AssertRead(jsonReader);
            AssertReadState(jsonReader, JsonToken.StartObject, info.PropertyName);
            while (jsonReader.Read())
            {
                if (jsonReader.TokenType == JsonToken.EndObject)
                {
                    break;
                }

                AssertReadState(jsonReader, JsonToken.PropertyName, info.PropertyName);
                string             localName = jsonReader.Value.ToString();
                ObjectPropertyInfo childInfo = attribute.ChildElements[localName];
                TkDebug.AssertNotNull(childInfo, string.Format(ObjectUtil.SysCulture,
                                                               "{0}没有在TagElement类型中声明,无法读取", localName), this);

                childInfo.Attribute.ReadObject(this, reader, receiver, settings, childInfo, serializerData);
            }

            SerializerUtil.CheckElementRequired(attribute.ChildElements, receiver);
        }
Esempio n. 2
0
        public void ReadTagElement(TagElementAttribute attribute, object reader,
                                   object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XElementData data = reader.Convert <XElementData>();

            //XElementData next = new XElementData { Current = data.Current.Elements().First(), Root = data.Root };
            InternalReadElement(data, receiver, settings, info.QName, attribute.ChildElements, info.ModelName);
            SerializerUtil.CheckElementRequired(attribute.ChildElements, receiver);
        }
Esempio n. 3
0
        public void ReadTagElement(TagElementAttribute attribute, object reader,
                                   object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XmlReader xmlReader = reader.Convert <XmlReader>();

            InternalReadElement(xmlReader, receiver, settings, info.QName,
                                attribute.ChildElements, info.ModelName);
            SerializerUtil.CheckElementRequired(attribute.ChildElements, receiver);
        }
Esempio n. 4
0
        internal ObjectInfo(object receiver, Type type, string modelName)
            : this()
        {
            IsObjectContext = Attribute.GetCustomAttribute(type,
                                                           typeof(ObjectContextAttribute), false) != null;

            // 扫描对象的每个属性,根据属性所标注的特性,配置Attribute,Content和Element子项
            PropertyInfo[] properties = type.GetProperties(BIND_ATTRIBUTE);

            foreach (var property in properties)
            {
                object[] propertyAttributes = property.GetCustomAttributes(false);
                if (propertyAttributes.Length == 0)
                {
                    continue;
                }

                var attribute = (from attr in propertyAttributes
                                 where attr is SimpleAttributeAttribute
                                 select attr).FirstOrDefault();
                if (attribute != null)
                {
                    SimpleAttributeAttribute simpleAttr = attribute as SimpleAttributeAttribute;
                    simpleAttr.SetNameMode(modelName, property);
                    ObjectPropertyInfo attrInfo = new ReflectorObjectPropertyInfo(
                        property, simpleAttr, modelName);
                    fAttributes.Add(attrInfo.QName.LocalName, attrInfo);
                    continue;
                }

                attribute = (from attr in propertyAttributes
                             where (attr is TextContentAttribute || attr is ComplexContentAttribute)
                             select attr).FirstOrDefault();
                if (attribute != null)
                {
                    AssertContent(receiver, type, fContent);
                    fContent = new ReflectorObjectPropertyInfo(property,
                                                               attribute as BaseObjectAttribute, modelName);
                    continue;
                }

                attribute = (from attr in propertyAttributes
                             where attr is TagElementAttribute
                             select attr).FirstOrDefault();
                if (attribute != null)
                {
                    TagElementAttribute tagAttr = attribute.Convert <TagElementAttribute>();
                    tagAttr.SetNameMode(modelName, property);
                    fElements.Add(type, property, tagAttr, modelName);
                    tagAttr.Read(type, property, modelName, propertyAttributes);
                    continue;
                }

                fElements.ReadElementAttribute(type, property, modelName, propertyAttributes);
            }
        }
Esempio n. 5
0
        public void WriteTagElement(TagElementAttribute attribute, object writer,
                                    object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            var      current = serializerData.Convert <XElement>();
            XElement element = new XElement(info.QName.ToXName());

            current.Add(element);
            SerializerUtil.WriteChildElement(this, writer, attribute.ChildElements, settings,
                                             value, (objValue, propInfo) => value, element);
        }
Esempio n. 6
0
        public void WriteTagElement(TagElementAttribute attribute, object writer,
                                    object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XmlWriter   xmlWriter   = writer.Convert <XmlWriter>();
            PrefixTable prefixTable = serializerData.Convert <PrefixTable>();

            WriteStartElement(xmlWriter, info.QName, prefixTable);
            SerializerUtil.WriteChildElement(this, writer, attribute.ChildElements, settings,
                                             value, (objValue, propInfo) => value, prefixTable);
            xmlWriter.WriteEndElement();
        }
        public void WriteTagElement(TagElementAttribute attribute, object writer,
                                    object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            DictionaryBuilder builder = writer.Convert <DictionaryBuilder>();
            QName             name    = info.QName;

            var infoArray = attribute.ChildElements.CreateOrderPropertyInfoList().ToArray();

            TkDebug.Assert(infoArray.Length == 1, string.Format(ObjectUtil.SysCulture,
                                                                "TagElement的子节点必须有且仅有一个,当前{1}下有{0}个", infoArray.Length, name), this);
            DictionaryBuilder subBuilder = builder.CreateBuilder();

            var item = infoArray[0];

            if (item.IsSingle)
            {
                item.Content.Attribute.WriteObject(this, subBuilder, value,
                                                   settings, item.Content, serializerData);
                builder.Add(name.LocalName, subBuilder);
            }
            else
            {
                IList list = value as IList;
                if (list != null)
                {
                    if (list.Count > 0)
                    {
                        var property = item.Get(list[0].GetType());
                        property.Attribute.WriteObject(this, subBuilder, value, settings,
                                                       property, serializerData);
                        builder.Add(name.LocalName, subBuilder);
                    }
                }
                else
                {
                    var property = item.Get(value.GetType());
                    property.Attribute.WriteObject(this, subBuilder, value, settings,
                                                   property, serializerData);
                    builder.Add(name.LocalName, subBuilder);
                }
            }
        }
Esempio n. 8
0
 public void ReadTagElement(TagElementAttribute attribute, object reader,
                            object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
 {
     throw new NotSupportedException();
 }
Esempio n. 9
0
 public void WriteTagElement(TagElementAttribute attribute, object writer,
                             object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
 {
     throw new NotImplementedException();
 }
Esempio n. 10
0
 public void ReadTagElement(TagElementAttribute attribute, object reader, object receiver,
                            ReadSettings settings, ObjectPropertyInfo info, object serializerData)
 {
 }