2013-06-27 4 views
3

Я новичок на этом сайте, поэтому извиняюсь за любое неправильное форматирование с моей стороны.Сериализация класса, содержащего Список <Object>

Я работаю над проектом и пытаюсь Сериализовать класс, содержащий список типа TDF_Test, в файл XML, но я продолжаю получать ошибку «Произошла ошибка, отражающая тип LoadInformation».

Я также прочитал «Внутреннее исключение», и он говорит: «Была ошибка, отражающая свойство« testList ». testList - это список объектов, которые я пытаюсь сериализовать.

Вот мой класс, содержащий Список, который я хочу сериализовать и сохранить в файле XML.

namespace SPCTool.Core_Classes 
{ 
    public class LoadInformation 
    { 
     public LoadInformation() 
     { 
      testList = new List<TDF.TDF_Test>(); 
     } 
     public List<TDF.TDF_Test> testList 
     { get; set; } 
    } 
} 

Вот как я сохранить его в XML

LoadInformation info = new LoadInformation(); 
info.testList = someList; // someList is the same type as testList 
SaveXML.SaveData(info, filename); 

Вот это StackTrace:

at SPCTool.User_Interfaces.MainForm.saveToolStripMenuItem_Click(Object sender, EventArgs e) in 
M:\astburyj_TestProcess\IGXLTestProcess\TestProcess\tools\SPCReviewTool\SPCReviewTool\User Interface\MainForm.cs:line 940 

Вот класс SaveXML

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 
using System.IO; 

namespace SPCTool.Core_Classes 
{ 
    public class SaveXML 
    { 
     public static void SaveData(object obj, string filename) 
     { 
      XmlSerializer sr = new XmlSerializer(obj.GetType()); 
      TextWriter writer = new StreamWriter(filename); 
      sr.Serialize(writer, obj); 
      writer.Close(); 
     } 
    } 
} 

Я сделал много поиска и не нашел хорошего решения. Кто-нибудь знает, что я могу сделать? Сообщите мне, нужна ли вам какая-либо другая информация или код.

Большое спасибо.

+0

Показать стек и включить код для 'SaveXML.SaveData (info, filename);' –

+0

Что-то не хватает в вашем вопросе. В этом коде нет свойства 'List'. Кроме того, вы используете 'XmlSerializer'? Можете ли вы опубликовать код, который создает сериализатор? –

+0

Извините, Патрик, как мне получить стек? – astburyj

ответ

1

XmlSerializer хочет записать данные в соответствии со схемой, которую он может определить заранее путем проверки типов. «Объект» просто не фигурирует в этом. Он хочет знать типы . «Хорошее решение» здесь просто: перестаньте сериализовать неизвестные/непредсказуемые данные и переключитесь на простую модель DTO, о которой может думать ваш выбранный сериализатор. В частности, стандартные в/string/float/etc члены, вложенные под-объекты , где объявлен тип, подклассы/наследование , уведомленные через XmlIncludeAttribute и т. Д. Списки, массивы, коллекции тоже прекрасны, SomeType [] в порядке, Array или object [] - нет.