Здравствуйте, V.Petrovski, Вы писали:
VP>XmlSerializer не умеет сериализовать IDictionary. VP>Надо реализовать IXmlSerializable или сконвертить в колекцию.
Получилось реализовать для класса ConfigurationConv интерфейс IXmlSerializable.
Правда сначала System.Collections.Generic.Dictionary<string, ConfigModule> itemsConf
сериализую в бинарную строку а затем в XML-формат. Вот какие получились методы реализующие IXmlSerializable
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void WriteXml(XmlWriter writer)
{
MemoryStream fs = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, itemsConf);
byte[] bytesArray = fs.ToArray();
int SizeDictionary = bytesArray.Length;
writer.WriteStartElement("size_dic");
writer.WriteValue(SizeDictionary);
writer.WriteEndElement();
writer.WriteStartElement("sam_dic");
writer.WriteBinHex(bytesArray, 0, bytesArray.Length);
writer.WriteEndElement();
}
public void ReadXml(XmlReader reader)
{
int val = 0;
while (reader.Read() == true)
{
if (reader.Name == "size_dic")
{
val = (int)reader.ReadElementContentAs(typeof(int), null);
break;
}
}
byte [] bytesArr = new byte[val];
if (reader.Name == "sam_dic")
{
reader.ReadElementContentAsBinHex(bytesArr, 0, val);
}
MemoryStream ms = new MemoryStream(bytesArr);
BinaryFormatter formattt = new BinaryFormatter();
this.itemsConf = (Dictionary<string, ConfigModule_2>)formattt.Deserialize(ms);
}