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); }
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); }
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); }
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); } }
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); }
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); } } }
public void ReadTagElement(TagElementAttribute attribute, object reader, object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData) { throw new NotSupportedException(); }
public void WriteTagElement(TagElementAttribute attribute, object writer, object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData) { throw new NotImplementedException(); }
public void ReadTagElement(TagElementAttribute attribute, object reader, object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData) { }