Пример #1
0
        public void WriteDynamicDictionary(DynamicDictionaryAttribute 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);
            IDictionary dict = value as IDictionary;

            if (dict != null)
            {
                var configData = attribute.PlugInFactory.ConfigData;
                foreach (DictionaryEntry item in dict)
                {
                    var   itemAttr = configData[item.Value.GetType()];
                    QName itemName = itemAttr.GetQName(itemAttr.LocalName);
                    Write(writer, item.Value, info.ModelName, settings, itemName, prefixTable, null);
                    //WriteStartElement(xmlWriter, itemName, prefixTable);
                    //InternalWriteXml(writer, item.Value, info.ModelName, settings, prefixTable);
                    //xmlWriter.WriteEndElement();
                }
            }

            xmlWriter.WriteEndElement();
        }
Пример #2
0
        public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                          object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            JsonTextReader jsonReader = reader.Convert <JsonTextReader>();

            AssertRead(jsonReader);
            AssertReadState(jsonReader, JsonToken.StartObject, info.PropertyName);
            IDictionary dict = attribute.GetDictionary(receiver, info);

            var configData = attribute.PlugInFactory.ConfigData;
            //var propertyInfo = info.Convert<ReflectorObjectPropertyInfo>().Property;
            var elementReader = new ConfigFactoryElementReader(attribute, info, info.ModelName);

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

                AssertReadState(jsonReader, JsonToken.StartObject, info.PropertyName);
                ObjectPropertyInfo subPropertyInfo = elementReader[name];
                Type   objectType     = subPropertyInfo.ObjectType;
                bool   useConstructor = subPropertyInfo.Attribute.Convert <ObjectElementAttribute>().UseConstructor;
                object subObject      = ReadObject(useConstructor, settings, jsonReader,
                                                   objectType, receiver, info.ModelName);
                dict[name] = subObject;
                //dict.Add(name, value);
            }
        }
Пример #3
0
        public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                          object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XmlReader xml = reader.Convert <XmlReader>();

            QName       name = info.QName;
            IDictionary dict = attribute.GetDictionary(receiver, info);

            if (xml.IsEmptyElement)
            {
                return;
            }
            var configData = attribute.PlugInFactory.ConfigData;
            //var propertyInfo = info.Convert<ReflectorObjectPropertyInfo>().Property;
            var elementReader = new ConfigFactoryElementReader(attribute, info, info.ModelName);

            while (xml.Read())
            {
                if (xml.NodeType == XmlNodeType.EndElement)
                {
                    QName nodeName = QName.Get(xml);
                    if (nodeName == name)
                    {
                        return;
                    }
                }

                if (xml.NodeType == XmlNodeType.Element)
                {
                    QName nodeName = QName.Get(xml);
                    ObjectPropertyInfo subPropertyInfo;
                    if (elementReader.SupportVersion)
                    {
                        string version = xml.GetAttribute(ToolkitConst.VERSION);
                        subPropertyInfo = elementReader[nodeName, version];
                    }
                    else
                    {
                        subPropertyInfo = elementReader[nodeName];
                    }
                    if (subPropertyInfo != null)
                    {
                        ObjectElementAttribute elementAttr = subPropertyInfo.Attribute.Convert <ObjectElementAttribute>();
                        Type   objectType = elementAttr.ObjectType;
                        object subObject  = elementAttr.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                            : ObjectUtil.CreateObject(objectType);
                        Read(reader, subObject, info.ModelName, settings, nodeName, null);
                        SerializerUtil.SetParent(receiver, subObject);
                        dict[nodeName.LocalName] = subObject;
                    }
                }
            }
        }
 public ConfigFactoryElementReader(DynamicDictionaryAttribute attr,
                                   ObjectPropertyInfo info, string modelName)
 {
     fModelName      = modelName;
     fObjectInfo     = info;
     fConfigData     = attr.PlugInFactory.ConfigData;
     fOrder          = attr.Order;
     fMultiple       = false;
     fCollectionType = attr.CollectionType;
     fRequired       = attr.Required;
     PropertyName    = fObjectInfo.PropertyName;
     fUseJsonObject  = attr.UseJsonObject;
 }
        public void WriteDynamicDictionary(DynamicDictionaryAttribute attribute, object writer,
                                           object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            IDictionary       dict    = value.Convert <IDictionary>();
            DictionaryBuilder builder = writer.Convert <DictionaryBuilder>();
            QName             name    = info.QName;

            DictionaryBuilder subDict = builder.CreateBuilder();

            foreach (DictionaryEntry item in dict)
            {
                DictionaryBuilder subDictItem = builder.CreateBuilder();
                WriteObject(subDictItem, item.Value, info.ModelName, settings, name, null);
                subDict.Add(item.Key.ToString(), subDictItem);
            }
            builder.Add(name.LocalName, subDict);
        }
Пример #6
0
        public void WriteDynamicDictionary(DynamicDictionaryAttribute attribute, object writer,
                                           object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            IDictionary    dict       = value.Convert <IDictionary>();
            JsonTextWriter jsonWriter = writer.Convert <JsonTextWriter>();

            if (info.WriteMode == SerializerWriteMode.WriteName)
            {
                QName name = info.QName;
                jsonWriter.WritePropertyName(name.LocalName);
            }
            jsonWriter.WriteStartObject();
            foreach (DictionaryEntry item in dict)
            {
                jsonWriter.WritePropertyName(item.Key.ToString());
                WriteAObject(writer, item.Value, info.ModelName, settings, jsonWriter);
            }
            jsonWriter.WriteEndObject();
        }
Пример #7
0
        public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                          object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XElementData currentData = reader.Convert <XElementData>();
            XElement     current     = currentData.Current;
            IDictionary  dict        = attribute.GetDictionary(receiver, info);
            var          configData  = attribute.PlugInFactory.ConfigData;
            //var propertyInfo = info.Convert<ReflectorObjectPropertyInfo>().Property;
            var elementReader = new ConfigFactoryElementReader(attribute, info, info.ModelName);

            foreach (XElement child in current.Elements())
            {
                string             nodeName = child.Name.LocalName;
                QName              qName    = child.Name.ToQName();
                ObjectPropertyInfo subPropertyInfo;
                if (elementReader.SupportVersion)
                {
                    var    verAttr = child.Attribute(ToolkitConst.VERSION);
                    string version = verAttr != null ? verAttr.Value : string.Empty;
                    subPropertyInfo = elementReader[nodeName, version];
                }
                else
                {
                    subPropertyInfo = elementReader[nodeName];
                }
                if (subPropertyInfo != null)
                {
                    ObjectElementAttribute elementAttr = subPropertyInfo.Attribute.Convert <ObjectElementAttribute>();
                    Type   objectType = elementAttr.ObjectType;
                    object subObject  = elementAttr.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                        : ObjectUtil.CreateObject(objectType);
                    XElementData next = new XElementData {
                        Current = child, Root = currentData.Root
                    };

                    Read(next, subObject, info.ModelName, settings, QName.Get(nodeName), null);
                    SerializerUtil.SetParent(receiver, subObject);
                    dict[nodeName] = subObject;
                }
            }
        }
Пример #8
0
        public void WriteDynamicDictionary(DynamicDictionaryAttribute 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);
            IDictionary dict = value as IDictionary;

            if (dict != null)
            {
                var configData = attribute.PlugInFactory.ConfigData;
                foreach (DictionaryEntry item in dict)
                {
                    var      itemAttr = configData[item.Value.GetType()];
                    QName    itemName = itemAttr.GetQName(itemAttr.LocalName);
                    XElement subItem  = new XElement(itemName.ToXName());
                    current.Add(subItem);
                    Write(writer, item.Value, info.ModelName, settings, itemName, subItem, null);
                    //InternalWriteXml(writer, item.Value, settings, element, info.ModelName);
                }
            }
        }
Пример #9
0
 public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                   object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
 {
     throw new NotSupportedException();
 }
Пример #10
0
 public void WriteDynamicDictionary(DynamicDictionaryAttribute attribute, object writer,
                                    object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
 {
     throw new NotSupportedException();
 }
 public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                   object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
 {
 }
Пример #12
0
 public void WriteDynamicDictionary(DynamicDictionaryAttribute attribute, object writer,
                                    object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData)
 {
 }