【问题标题】:Convert objects to XML in .NET Framework在 .NET Framework 中将对象转换为 XML
【发布时间】:2020-07-05 13:57:15
【问题描述】:

在我的工作中,我正在维护一个遗留系统(.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 框架 4.7 中继续),但我想知道是否还有其他方法可以以更现代的方式使用 XML,不幸的是无论如何它必须是 XML,所以我想知道是否有转换 XML 的最佳实践,或者一些有助于这项服务的包。

谢谢。

【问题讨论】:

标签: c# .net xml object converters


【解决方案1】:

您可以为您的班级创建一个扩展并使用如下:

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

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 2013-04-10
    • 2013-03-17
    • 2013-07-13
    • 2010-12-07
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多