序列化包含List<Object>的类

3

我是一名新手,如果我的格式有任何错误,请见谅。

我正在做一个项目,尝试将一个包含类型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);

以下是堆栈跟踪:

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();
        }
    }
}

我做了很多搜索,但没有找到一个好的解决方案。有人知道我该怎么做吗?如果您需要任何其他信息或代码,请告诉我。
非常感谢。

展示堆栈跟踪,并包括“SaveXML.SaveData(info, filename);”代码。 - Patrick Magee
你的问题似乎有些遗漏。这段代码中没有List属性。另外,你是否在使用XmlSerializer?能否提供创建序列化器的代码? - Michael Gunter
当程序崩溃时,堆栈跟踪是异常对象的一部分。 - SASS_Shooter
你真的需要添加类/方法SaveXML.SaveData的代码,这样我们才能看到你尝试序列化xml的方式。 - SASS_Shooter
@Yatrix 出现了反映属性'testList'的错误。 - astburyj
显示剩余10条评论
1个回答

1
XmlSerializer希望根据预先检查类型的模式来写入数据。"对象"在其中根本没有起到作用。它想知道具体的类型。这里的“好解决方案”是:停止尝试序列化未知/不可预测的数据,并切换到您选择的序列化程序可以理解的简单DTO模型。特别是标准的into / string / float /等成员,嵌套子对象(其中广告类型),子类/继承(通过XmlIncludeAttribute通知),等。列表、数组、集合也都可以,但是SomeType[]可以,Array或object[]不行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接