我目前遇到一个非常奇怪的问题,我似乎不知道如何解决它。
我有一个fairly我正在尝试使用 XmlSerializer 类对其进行序列化的复杂类型。这实际上运行良好并且类型序列化正确,但似乎需要一个very长时间这样做;大约 5 秒,具体取决于对象中的数据。
经过一些分析后,我奇怪地缩小了问题范围,以在调用 XmlSerializer.Serialize 时指定 XmlRootAttribute。我这样做是为了将正在序列化的集合的名称从 ArrayOf 更改为更有意义的名称。一旦我删除参数,操作几乎是即时的!
任何想法或建议都会很好,因为我完全被这个问题难住了!
仅供遇到此问题的其他人使用;有了上面的答案和来自 MSDN 的示例,我设法使用以下类解决了这个问题:
public static class XmlSerializerCache
{
private static readonly Dictionary<string, XmlSerializer> cache =
new Dictionary<string, XmlSerializer>();
public static XmlSerializer Create(Type type, XmlRootAttribute root)
{
var key = String.Format(
CultureInfo.InvariantCulture,
"{0}:{1}",
type,
root.ElementName);
if (!cache.ContainsKey(key))
{
cache.Add(key, new XmlSerializer(type, root));
}
return cache[key];
}
}
然后,我不使用采用 XmlRootAttribute 的默认 XmlSerializer 构造函数,而是使用以下内容:
var xmlRootAttribute = new XmlRootAttribute("ExampleElement");
var serializer = XmlSerializerCache.Create(target.GetType(), xmlRootAttribute);
我的应用程序现在再次执行!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)