在 .NET Framework 中将对象转换为 XML

Convert objects to XML in .NET Framework

在我的工作中,我正在维护一个遗留系统 (.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 的最佳实践或一些有助于此服务的包。

谢谢。

您可以为您的 class 创建一个扩展并按如下方式使用:

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);