Для восстановленного XML-файла: -
<ExtendedAttributes>
<EnableDisplayName>True</EnableDisplayName>
<EditorType>Enhanced</EditorType>
<EnableConversationNotifications>True</EnableConversationNotifications>
<EnableUserSignatures>True</EnableUserSignatures>
<CPPageSize>10</CPPageSize>
<EnableActivityMessageNewUserAvatar>True</EnableActivityMessageNewUserAvatar>
<EnableActivityMessageThirdPartyMessageType>True</EnableActivityMessageThirdPartyMessageType>
<EnableStartConversations>1</EnableStartConversations>
<avatarUrl>~/cfs-file.ashx/__key/communityserver-components-selectableavatars/03b2c875-fbfb-4d26-8000-ef001b9f4728/avatar.png</avatarUrl>
<EnableActivityMessageNewProfileComment>False</EnableActivityMessageNewProfileComment>
<EnableActivityMessageStatus>True</EnableActivityMessageStatus>
</ExtendedAttributes>
Вы можете разобрать его: -
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("ExtendedAttributes")]
public class SerialisableDictionary : Dictionary<string, string>, IXmlSerializable
{
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
reader.Read();
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
string key = reader.Name;
this.Add(key, reader.ReadElementContentAsString());
reader.MoveToElement();
}
reader.ReadEndElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
// TODO
}
#endregion
}
class Program
{
static void Main(string[] args)
{
SerialisableDictionary sd = new SerialisableDictionary();
XmlSerializer x = new XmlSerializer(sd.GetType());
using (StreamReader sr = new StreamReader(@"XMLFile1.xml"))
{
sd = (SerialisableDictionary)x.Deserialize(sr);
}
foreach(var kvp in sd)
{
Console.WriteLine(kvp.Key + " = " + kvp.Value);
}
Console.WriteLine("Done.");
Console.ReadKey();
}
}
Это дает вам Dictionary<string, string>
вы почти наверняка хотите, чтобы значения истина/ложь/строки/номер разобрался, но это еще одна проблема.
Я ценю, что это не идеально, но этого должно быть достаточно, чтобы заставить вас двигаться. К сожалению, это будет довольно сложно, и у меня мало времени.
Все в значительной степени основаны на ответ в Serialize Class containing Dictionary member
Вы должны привести в порядок, что вверх, это нечитаемым. –
Поместите ваш xml в файл, скажем, 'my.xml', затем - в командной строке: xsd my.xml xsd my.xsd/classes И тогда у' my.cs' есть код. Или просто напишите класс вручную: public class ExtendedAttributes {public bool EnableDisplayName {get; set;} ... public int CPPageSize {get; set;} ... В любом случае используйте 'new XmlSerializer (typeof (ExtendedAttributes)). Serialize (...) 'и т. Д. –
мой класс ExtendedAtribute не является фиксированным классом, но его объектом типа значения ключа, который может динамически увеличиваться и уменьшаться – Selwyn