Конвертировать объекты в XML in. NET Framework - PullRequest
0 голосов
/ 25 марта 2020

В своей работе я поддерживаю устаревшую систему (. net framework 4.7). Он много работает, преобразовывая объекты в xml (и сохраняя в базу данных), а также наоборот, xml в объекты. За исключением того, что текущее приложение много работает со строками, чтобы преобразовать объект в xml.

var xmlDoc = new XmlDocument();
xmlDoc.Load(ms);

foreach (XmlNode item in xmlDoc.ChildNodes)
{
    if (item.Name == "xml")
    {
        foreach (XmlNode subitem in item.ChildNodes)
        {
            if (subitem.Name == "rs:data")
            {
                foreach (XmlNode sSubitem in subitem.ChildNodes)
                {
                    if (sSubitem.Name == "rs:insert")
                    {
                        foreach (XmlNode itemsub in sSubitem.ChildNodes)
                        {
                            for (var i = 0; i < itemsub.Attributes.Count; i++)
                            {
                                if (itemsub.Attributes[i].Name == attrValue)
                                {
                                    dataGenerator = itemsub.Attributes[i].Value;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Пример 2:

 _rootElements.Add(
 new XElement("Books",
     new XElement("Book_year", _year),
     new XElement("Book_name", _book_name)
 ));

Пример 3:

node.SelectSingleNode("DocumentType").InnerText

Я думаю о переписывании приложения (оно должно продолжаться в. net framework 4.7), но мне было интересно, будут ли другие способы работать с XML более современным способом, к сожалению, это должно быть XML в любом случае, поэтому мне было интересно, будут ли лучшие практики для преобразования XML или какой-нибудь пакет, который поможет в этом сервисе.

Спасибо.

1 Ответ

1 голос
/ 25 марта 2020

Вы можете создать расширение для своего класса и использовать его следующим образом:

public static class XmlExtensions
{
    public static string ToXML(this YourClass value)
    {
        using(var sw = new System.IO.StringWriter())
        { 
            var serializer = new XmlSerializer(value.GetType());
            serializer.Serialize(sw, value);
            return sw.ToString();
        }
    }

    public static YourClass FromXML(string xml)
    {
        using(var sr = new System.IO.StringReader(xml))
        {
            var serializer = new XmlSerializer(typeof(YourClass ));
            return serializer.Deserialize(sr) as YourClass ;
        }
    }
}

И назвать его:

var obj = new YourClass();

// fill properties

var xml = obj.ToXML();

// To reverse from string to obj, use:

var obj2 = XmlExtensions.FromXML(xml);
...