【问题标题】:XmlRoot gets overwritten when using System.Xml.Serialization Serializing Generic class使用 System.Xml.Serialization 序列化通用类时 XmlRoot 被覆盖
【发布时间】: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


【解决方案1】:

我没有看到问题。我在您的代码中添加了一个测试类,并修改了您的 main() 方法以使用类。结果有效。

        static void Main(string[] args)
        {
            MyListClass[] myListClass = new MyListClass[3];
            Console.WriteLine(Pull<string>("","",myListClass));
        }
    }
    public class MyListClass
    {
        string myProperty { get; set; }
    }

【讨论】:

  • 我也不... 987654324@xml标签
  • 很难击中移动的目标。
  • 你是什么意思?
  • 当您继续编辑帖子(移动目标)时,回复/答案并不总是反映最新的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多