如果我想替换下面的偶然发现一个工厂的班级代码,我和我都不确定如何使用它。
样本模型
public class SampleData
{
public string Name { get; set; }
public string Country { get; set; }
}现有代码
List<SampleData> objects = new List<SampleData>();
objects.Add(new SampleData() { Country = "Australia", Name = "aus" });
StringWriter writer = new StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(List<SampleData>));
serializer.Serialize(writer, objects);工厂级
public static class CachingXmlSerializerFactory
{
private static readonly Dictionary<string, XmlSerializer> Cache = new Dictionary<string, XmlSerializer>();
private static readonly object SyncRoot = new object();
public static XmlSerializer Create(Type type, XmlRootAttribute root)
{
if (type == null) throw new ArgumentNullException("type");
if (root == null) throw new ArgumentNullException("root");
var key = String.Format(CultureInfo.InvariantCulture, "{0}:{1}", type, root.ElementName);
lock (SyncRoot)
{
if (!Cache.ContainsKey(key))
{
Cache.Add(key, new XmlSerializer(type, root));
}
}
return Cache[key];
}
public static XmlSerializer Create<T>(XmlRootAttribute root)
{
return Create(typeof(T), root);
}
public static XmlSerializer Create<T>()
{
return Create(typeof(T));
}
public static XmlSerializer Create<T>(string defaultNamespace)
{
return Create(typeof(T), defaultNamespace);
}
public static XmlSerializer Create(Type type)
{
return new XmlSerializer(type);
}
public static XmlSerializer Create(Type type, string defaultNamespace)
{
return new XmlSerializer(type, defaultNamespace);
}
}发布于 2014-01-30 23:05:42
重读文章引用的MSDN部分。您已经在使用缓存内部序列化程序的两个构造函数之一,因此不会导致内存泄漏。如果您使用的是其他构造函数之一,则需要担心缓存XmlSerializer,但您没有。没必要修补没坏的东西。;-)
https://stackoverflow.com/questions/21468822
复制相似问题