【发布时间】:2017-09-26 15:18:52
【问题描述】:
亲爱的 StackOverflow 爱好者,
每当我尝试序列化泛型类中的对象时,我的 XmlRoot 都会被覆盖。
=> 我得到 XmlRoot: classname + _x0060_1(顺便说一下,有一个 1,因为只给出了一个类型参数,换句话说,它可以是所需的任意数量的类型参数)
即使我使用
[XmlRoot("BaseSyncOneWayInput")]
甚至
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = typeof(T).Name;
这是一个 .NET Fiddle 可以重现错误:https://dotnetfiddle.net/X9fRkA
【问题讨论】:
-
应该在这里找到你的答案:stackoverflow.com/a/1237827/1462295 -> dotnetfiddle.net/vEm141
-
谢谢!我迫不及待想明天在工作中试试这个
-
如果你使用那个答案,你应该缓存
XmlSerializer以避免内存泄漏,正如here解释的那样。 -
@dbc 还是这样吗?看来构造函数现在实现了一个缓存:github.com/Microsoft/referencesource/blob/…(例如第 184 行)
-
@BurnsBA - 即使在 .Net core 2.0 中,documented 仍然是正确的:如果您使用任何其他构造函数,则会生成同一程序集的多个版本并且永远不会卸载,这会导致内存泄漏和性能下降。 ...您必须将程序集缓存在哈希表中。
标签: c# xml generics serialization root-element