序列化包含List <object> </object>的类

时间:2013-06-27 18:36:11

标签: c# list xml-serialization xmlserializer

我是这个网站的新手,所以我为我的任何不正确的格式道歉。

我正在开发一个项目,我正在尝试将包含类型为TDF_Test的List的类序列化为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();
        }
    }
}

我做了很多搜索,但没有找到一个好的解决方案。有谁知道我能做什么?如果您需要任何其他信息或代码,请与我们联系。

非常感谢。

1 个答案:

答案 0 :(得分:1)

XmlSerializer希望根据它可以通过检查类型预先弄清楚的模式来编写数据。 “对象”根本就没有在这里看到。它想知道类型。这里的“好解决方案”很简单:停止尝试序列化未知/不可预测的数据,并切换到您选择的序列化程序可以推理的简单DTO模型。特别是,标准的/ string / float / etc成员,嵌套的子对象,其中公布了类型,子类/继承通过XmlIncludeAttribute 等通知,列表,数组,收集也很好,显然 - 但是当SomeType []很好时,Array或object []不是。