Esempio n. 1
0
        private void SerializeDictionaryItem(IDictionary dic, DictionaryEntry entry, DictionaryPropertyDescriptor propDesc, DictionaryKeyValuePropertyDescriptor keyDesc, DictionaryKeyValuePropertyDescriptor valueDesc, XmlTextWriter writer, XmlSerializerContext context)
        {
            //escribo el item
            string        itemName = propDesc.GetElementNameForDictionaryItem(context);
            object        key      = entry.Key;
            object        value    = entry.Value;
            IXmlConverter converter;

            if (key != null)
            {
                writer.WriteStartElement(itemName);

                Type keyType = key.GetType();

                if (keyDesc.IsXmlAttribute(keyType, context))
                {
                    converter = context.GetConverter(keyType);
                    converter.ToXml(dic, keyDesc, key, writer, context);
                }

                if (value != null)
                {
                    Type valueType = value.GetType();
                    if (valueDesc.IsXmlAttribute(valueType, context))
                    {
                        converter = context.GetConverter(valueType);
                        converter.ToXml(dic, valueDesc, value, writer, context);
                    }
                }

                //escribo los elementos
                if (keyDesc.IsXmlElement(keyType, context))
                {
                    converter = context.GetConverter(keyType);
                    converter.ToXml(dic, keyDesc, key, writer, context);
                }

                if (value != null)
                {
                    Type valueType = value.GetType();
                    if (valueDesc.IsXmlElement(valueType, context))
                    {
                        converter = context.GetConverter(valueType);
                        converter.ToXml(dic, valueDesc, value, writer, context);
                    }
                }

                writer.WriteEndElement();
            }
        }