【发布时间】:2020-09-22 09:05:12
【问题描述】:
这是我第一次尝试序列化 XML,我需要了解为什么我的代码会出现错误:
private void function(Object2 InputParameters)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer s = new XmlSerializer(typeof(Object1));
StringWriter XMLWriter = new StringWriter();
s.Serialize(XMLWriter, InputParameters, ns);
XmlDocument DOC_Xml = new XmlDocument();
DOC_Xml.LoadXml(XMLWriter.ToString());
}
内部异常:
{“'SRV.Entities.Object2'类型的对象无法转换为'SRV.Entities.Object1'类型。”}
堆栈跟踪:
" in System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)\r\n in System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)\r\n "
错误行在s.Serialize(XMLWriter, ParametrosEntrada, ns);,但我不明白原因。
如何解决不同对象之间的序列化?
谢谢各位。
【问题讨论】:
-
Xml 序列化要求序列化类和反序列化类相同,但有一些例外 1) 只查看公共变量 2) 对象类型必须相同。因此,当 xml 标记包含子项时,您不能在反序列化类中包含字符串。
-
您能分享一个minimal reproducible example 来演示这个问题吗?可能您的
InputParameters对象不是Object1类型,但我们需要确认。如果是这样,从您的问题中不清楚您是否正在尝试序列化Object2是Object1的子类的多态类型层次结构。请参阅How to Ask:帮助其他人重现问题...如果您的问题与您编写的代码有关,您应该包含一些...包含足够的代码以允许其他人重现问题。 -
如果只需要将对象转换为XML字符串,可以使用this answer转Convert an object to an XML string。但是,直接序列化到
XmlDocument而不需要中间的string表示应该更高效。为此,请使用从 this answer 到 Populating ANY elements on a web service in C# 的XmlNodeExtensions.AsXmlDocument()。
标签: c# xml serialization