相关疑难解决方法(0)

内存泄漏使用StreamReader和XmlSerializer

我一直在谷歌搜索过去几个小时并尝试不同的东西,但似乎不能在这个底部....

当我运行此代码时,内存使用量不断增长.

while (true)
{
    try
    {
        foreach (string sym in stringlist)
        {
            StreamReader r = new StreamReader(@"C:\Program Files\" + sym + ".xml");
            XmlSerializer xml = new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode"));
            XMLObj obj = (XMLObj)xml.Deserialize(r);                       
            obj.Dispose();
            r.Dispose();
            r.Close();
        }
    }    
    catch(Exception ex) 
    {
        Console.WriteLine(ex.ToString()); 
    }
    Thread.Sleep(1000);
    Console.Clear();
}
Run Code Online (Sandbox Code Playgroud)

XMLObj是一个自定义对象

[Serializable()]
public class XMLObj: IDisposable
{
    [XmlElement("block")]
    public List<XMLnode> nodes{ get; set; }

    public XMLObj() { }

    public void Dispose()
    {
        nodes.ForEach(n => n.Dispose());
        nodes= null;

        GC.SuppressFinalize(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加GC.Collect(); 但这似乎没有做任何事情.

c# xml streamreader xmlserializer

24
推荐指数
4
解决办法
1万
查看次数

在序列化期间排除某些属性而不更改原始类

我正在尝试序列化具有多个属性的对象,但我不想在序列化中包含所有属性.另外,我想更改日期格式.

当然我可以添加[XmlIgnore],但我不允许更改原始类.

我能想到的唯一选择是创建一个新类并复制两个类之间的所有内容.但这将是丑陋的,需要大量的手动代码.

是否有可能创建一个子类,因为原始不是抽象的?

我的问题是:

  1. 如何在不更改原始类的情况下排除某些属性?

  2. 如何自定义输出XML的日期格式?

要求:

  1. 尽可能强大的打字

  2. 序列化的XML应该是可反序列化的

提前致谢.

c# xml-serialization

12
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×2

streamreader ×1

xml ×1

xml-serialization ×1

xmlserializer ×1