Как бы я десериализовал некоторый класс из XML (файла) и наоборот? - PullRequest
1 голос
/ 14 сентября 2011

У меня есть следующий класс и члены-данные (плюс нерелевантные методы). Я новичок в XML и .NET (хотя это оправдание стареет) и провел пару дней, читая записи MSDN (и все, что обнаружил Google)для первого XMLReader, затем XMLDocument и теперь XDocument, XElement и XNode, но я не ближе к конкретному решению для сериализации моего класса (возможно, мне нужно изучить сериализацию в .NET более подробно).Для начала у меня есть некоторые данные в XML-файле, которые я хочу прочитать (хотя они и имеют неправильный формат), чтобы инициализировать класс для инициализации моего приложения.Класс конфигурации выглядит следующим образом:

class IWantToFile
{
    class DirsAndFiles
    {
        public List<string> Suffixes;
        public string Dir;
    }
    enum OPOptsEnum
    {
        op1Description, op2Description, op3Description, op4Description,
        op5Description, op6Description, op7Description, op8Description,
    };
    List<DirsAndFiles> ProjectDirs;
    bool[] OPOpts = new bool[(int)OPOptsEnum.op8Description + 1];
    bool otherOpt;
}

Наблюдая в нем отношения один к одному и один ко многим (например, List<DirsAndFiles> ProjectDirs), может кто-нибудь дать краткие методы для чтения и записи этих данных в файл?Это очень помогло бы моему развитию в этих областях.

Я дошел до:

        if (File.Exists(SPECFILENAME)) {
            XDocument xdoc = XDocument.Load(SPECFILENAME);
            //Ummm.....
        }

, но тогда мое отсутствие .NET XML и опыта Linq подведет меня.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Я думаю, вы, возможно, захотите использовать XmlSerializer , который «сериализует и десериализует объекты в и из документов XML»?

См. Как сериализовать объект в XML с помощью Visual C # для примера кода.

1 голос
/ 14 сентября 2011
[Serializable]
public class MyObject
{
    public string SerializeMe { get; set; }

    [XmlIgnore]
    public string DONTSerializeMe { get; set; }
}

Помощник ....

public static class SerializerHelper<T>
{
    public static string Serialize(T myobject)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        StringWriter stringWriter = new StringWriter();
        xmlSerializer.Serialize(stringWriter, myobject);
        string xml = stringWriter.ToString();

        return xml;
    }
    public static T Deserialize(string xml)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
        StringReader stringReader = new StringReader(xml);
        return (T)xmlSerializer.Deserialize(stringReader);
    }
}

Использование

MyObject myObject = new MyObject();
string xml = SerializerHelper<MyObject>.Serialize(myObject);
MyObject DeserializedObject = SerializerHelper<MyObject>.Deserialize(xml);
...