Хорошо, пост становился слишком длинным и содержал слишком много самокоррекции, поэтому я переписываю его с самого начала.Если вы хотите прочитать обратно, проверьте журнал изменений.
Последняя версия кода может быть найдена здесь: http://pastebin.com/KMHVb5gA Я получаю переполнение в system.XML.dll по некоторым причинам;У него нет трассировки стека, и он просто останавливает выполнение.
Я понятия не имею, ПОЧЕМУ он переполняется, но я знаю, что это происходит после того, как я вызываю Save ()
public bool save(string filename) //causes stack overflow when savenode is IEnumerable (and otherwise it does nothing).
{
XmlSerializer serializer = new XmlSerializer(typeof(List<savenode>));
System.IO.FileStream fstream = new System.IO.FileStream(filename, System.IO.FileMode.OpenOrCreate);
serializer.Serialize(fstream, innerdict);
fstream.Flush();
fstream.Close();
return true;
}
Я полностьюновичок в создании моих собственных классов IEnumerable, поэтому, если вы видите что-то явно неправильное, пожалуйста, дайте мне знать!
Код вызова выглядит следующим образом:
Console.WriteLine("Commencing XML persistency test");
CedLib.Persistence.XMLPersistenceDictionary.XMLPersistenceDictionary persistence = new CedLib.Persistence.XMLPersistenceDictionary.XMLPersistenceDictionary(logger); //Works!!
persistence.Add("test", "testvaluefennecs");
Console.WriteLine(persistence["test"].obj);
foreach (var snode in persistence)
{
Console.Write("Contents: " + snode.obj);
}
persistence.save("test.xml");
persistence.load("test.xml");
if (persistence["test"].obj != "testvaluefennecs")
{
logger.logerror(new Exception("XML test failed!! Expected 'testvaluefennecs', got: " + persistence["test"].obj));
}
else
Console.WriteLine("XML test success!");
И вывод выглядит так:
Commencing XML persistency test
[17:54:09] info: Initialized new XMLPersistence dictionary
New node: test
[17:54:09] Notice: Adding new dictionary item: test
testvaluefennecs
Contents: testvaluefennecs
Process is terminated due to StackOverflowException.
У кого-нибудь есть идеи?Любое предложение приветствуется!Я полностью застрял в этом!
[править] Только что нашел точную строку, по которой он переполняется, вот это:
XmlSerializer serializer = new XmlSerializer(typeof(List<savenode>));