2012-05-14 3 views
-3

Мне нужно создать сериализуемый класс, который имеет и xml, в формате, указанном ниже, Пожалуйста, проверьте xml по этой ссылке и Элемент ExtendedAttribute.Создание серийного класса

http://telligent.com/community/developers/w/developer6/update-a-user.aspx

Следующий тег формируется как и пара ключей значения и не имеет объект

мой класс ExtendedAtribute не фиксированный класс, но его ключ типа объект значения, которое может увеличиваться и уменьшаться динамически

Не могли бы вы помочь мне в этом срочном.

+1

Вы должны привести в порядок, что вверх, это нечитаемым. –

+0

Поместите ваш 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 (...) 'и т. Д. –

+0

мой класс ExtendedAtribute не является фиксированным классом, но его объектом типа значения ключа, который может динамически увеличиваться и уменьшаться – Selwyn

ответ

1

Для восстановленного 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

+0

Спасибо, что это сработало для меня и я могу продолжить работу, Еще раз спасибо за подробный код. – Selwyn

+0

@ Selwyn, рад помочь. –

Смежные вопросы