我希望序列化List<object>
包含我编写的特定类。
public static void Main(string[] args)
{
List<object> ListToSerialize = new List<object>();
ListToSerialize.Add(new CustomeClass());
ListToSerialize.Add("");
ListToSerialize.Add(2);
ListToSerialize.Add(new int[] { 7, 8, 6 });
XmlSerializer xmlSerializer = new XmlSerializer(ListToSerialize.GetType());
StringWriter stringWriter = new StringWriter();
using (var xmlWriter = XmlWriter.Create(stringWriter))
{
xmlSerializer.Serialize(xmlWriter, ListToSerialize);
}
string Res = stringWriter.ToString();
}
[Serializable]
public class CustomeClass
{
}
我收到了错误: 生成XML文档时出错。 不期望New.CustomeClass类型。使用XmlInclude或SoapInclude属性指定静态未知的类型。
我还实现了IXmlSerializable
接口。
[Serializable]
public class CustomeClass : IXmlSerializable
{
public System.Xml.Schema.XmlSchema GetSchema()
{
throw null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteString("1");
}
}
我得到了以下错误:
在此上下文中不能使用New.CustomeClass类型。要使用New.CustomeClass作为参数,返回类型或类或结构的成员,必须将参数,返回类型或成员声明为New.CustomeClass类型(它不能是对象)。 New.CustomeClass类型的对象不能用于未类型的集合,例如ArrayLists。
当我使用List<CustomeClass>
时,它有效,但我需要List<object>
。
谢谢你的帮助
答案 0 :(得分:0)
虽然我肯定建议不使用这种代码,但您可以使用XmlSerializer
构造函数重载,它接受Type[]
个其他类型。来自XmlSerializer Constructor
:
初始化可以的XmlSerializer类的新实例 将指定类型的对象序列化为XML文档,以及 将XML文档反序列化为指定类型的对象。如果一个 property或field返回一个数组,extraTypes参数指定 可以插入数组的对象。
像这样使用:
public static void Main(string[] args)
{
List<object> ListToSerialize = new List<object>();
ListToSerialize.Add(new CustomeClass());
ListToSerialize.Add("");
ListToSerialize.Add(2);
ListToSerialize.Add(new int[] { 7, 8, 6 });
XmlSerializer xmlSerializer = new XmlSerializer(ListToSerialize.GetType(), new[]
{ typeof(int}, typeof(int[]), typeof(string), typeof(CustomeClass) });
StringWriter stringWriter = new StringWriter();
using (var xmlWriter = XmlWriter.Create(stringWriter))
{
xmlSerializer.Serialize(xmlWriter, ListToSerialize);
}
string Res = stringWriter.ToString();
}
答案 1 :(得分:0)
如果删除IXmlSerializable接口,它可以工作。 知道这个解决方案会增加时间复杂度,这是充分利用的。