c# - 对象到/从 XML : generic Load and Save

标签 c# xml generics serialization

<分区>

我需要将一些对象存储为 XML 文件,以便保存数据并在以后加载它。 我对此进行了编码,它对我有用:

public static Project Load(String file)
{
    using (var stream = System.IO.File.OpenRead(file))
    {
        var serializer = new XmlSerializer(typeof(Project));
        return serializer.Deserialize(stream) as Project;
    }
}

public static void Save(Project p, String file)
{
    using (var writer = new System.IO.StreamWriter(file))
    {
        var serializer = new XmlSerializer(p.GetType());
        serializer.Serialize(writer, p);
        writer.Flush();
    }
}

现在,我需要对其他类型的对象执行此操作,我真的不想为每个对象类复制/粘贴这些方法。

是否可以将对象类传递给方法并使这些方法对任何对象类都是通用的?

最佳答案

我通常使用 https://stackoverflow.com/a/271423/1315444 中的这两种方法 希望这有帮助 :D

/// <summary>Serializes an object of type T in to an xml string</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="obj">Object to serialize</param>
/// <returns>A string that represents Xml, empty otherwise</returns>
public static string XmlSerialize<T>(this T obj) where T : class, new()
{
    if (obj == null) throw new ArgumentNullException("obj");      
    var serializer = new XmlSerializer(typeof(T));
    using (var writer = new StringWriter())
    {
        serializer.Serialize(writer, obj);
        return writer.ToString();
    }
}


/// <summary>Deserializes an xml string in to an object of Type T</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="xml">Xml as string to deserialize from</param>
/// <returns>A new object of type T is successful, null if failed</returns>
public static T XmlDeserialize<T>(this string xml) where T : class, new()
{
    if (xml == null) throw new ArgumentNullException("xml");    
    var serializer = new XmlSerializer(typeof(T));
    using (var reader = new StringReader(xml))
    {
        try { return (T)serializer.Deserialize(reader); }
        catch { return null; } // Could not be deserialized to this type.
    }
}

然后你可以去

Project p = new Project();
string result = p.XmlSerialize();
Project p2 = result.XmlDeserialize<Project>();

关于c# - 对象到/从 XML : generic Load and Save,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933328/

相关文章:

scala - 如何通过scala中的类方法传递类型参数?

javascript - OpenUI5 ComboBox - 如何设置默认键/值

jquery - 在 jquery 中从 xml 文档中检索不同的属性

Python3 XML 获取标签之间的文本

java - 使用java泛型添加2种类型的参数

java - 在运行时访问参数化类型信息

c# - MySQL C#错误; "connection must be valid and open"

c# - 在 C# 中运行 powershell,运气不太好!

c# - 是否可以开设私有(private)类?

c# - 从工作流事件发布事件