fuz*_*uzz 1 c# asp.net factory-pattern xmlserializer c#-4.0
我遇到了一个工厂类,如果我想替换下面的XmlSerializer代码,我不完全确定如何使用它.
样本模型
public class SampleData
{
public string Name { get; set; }
public string Country { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现有守则
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);
Run Code Online (Sandbox Code Playgroud)
工厂类
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);
}
}
Run Code Online (Sandbox Code Playgroud)
重读文章引用MSDN的部分.您已经在使用缓存内部序列化程序的两个构造函数之一,因此它不应导致内存泄漏.如果你使用的是其他构造函数之一,则需要担心缓存XmlSerializer,但事实并非如此.无需修复未破坏的东西.;-)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |