maf*_*afu 20 c# static instance xml-serialization
我有一个XmlSerializer在其Read/WriteXml方法中使用的类.目前是Serializer private readonly.
public class Foo : IXmlSerializable
{
private Bar _bar = new Bar();
private readonly XmlSerializer serBar = new XmlSerializer (typeof (Bar));
public void WriteXml (XmlWriter writer)
{
serBar.Serialize (writer, Bar);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑private static改为使用Serializer ,因此所有Foos之间共享一个实例.这是个好主意,还是有可能存在问题?
Pav*_*aev 34
是的,这是个好主意.不,它没有任何问题.特别是,线程安全不是问题 - 从 类的MSDN文档XmlSerializer:
线程安全
这种类型是线程安全的.
小智 14
根据Neal的说法 - 通过泛型和readonly更加普遍和安全:
public static class Helper<T>
{
public static readonly XmlSerializer Serializer = new XmlSerializer(typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
用于:
Helper<My>.Serializer
Run Code Online (Sandbox Code Playgroud)
一种方法是创建一个XmlSerializers工厂并静态引用它(或作为IoC引用),如:
public class XmlSerializerFactory
{
public XmlSerializer GetSerializerFor<T>()
{
lock (this)
{
Type typeOfT = typeof(T);
if (false == serializers.ContainsKey(typeOfT))
{
XmlSerializer newSerializer = new XmlSerializer(typeOfT);
serializers.Add(typeOfT, newSerializer);
}
return serializers[typeOfT];
}
}
private Dictionary<Type, XmlSerializer> serializers = new Dictionary<Type, XmlSerializer>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6651 次 |
| 最近记录: |