【发布时间】:2019-09-29 19:53:52
【问题描述】:
我将收到这两个 xmls
<XML>
<Name>Test</Name>
</XML>
或
<XML1 Name1="Test">
</XML1>
我想知道是否有一种方法可以只使用一个变量来处理元素“Name”和属性“Name1”的值。
我试过了,但是当我执行序列化函数 (XmlSerializer xmlSerializer = new XmlSerializer(typeof(XML));) 时,它在运行时失败并显示以下消息:
“反映类型 'XMLSerializerTest.XML' 时出现错误。”
使用XmlChoiceIdentifier 不起作用,但我是处理 XML 的新手,所以可能有问题。最后我想做的是接收一种格式并能够更改为另一种格式。我在这里写了一个简单的例子,但我想在整个项目中传播解决方案。
这是我创建的类:
namespace XMLSerializerTest
{
[XmlType("XML", Namespace = "")]
[XmlRoot("XML1")] //This doesn't handle multiple root names
public class XML
{
[XmlElement("Name")]
[XmlAttribute("Name1")]
public string Name { get; set; }
}
}
这是我从 Main 做的尝试和测试它:
//This is the line giving the error I mentioned
XmlSerializer xmlSerializer = new XmlSerializer(typeof(XML));
StreamReader sr = new StreamReader("[FileLocation.xml]");
//Do something to change to a diff "format"
XML xmltest = (XML)xmlSerializer.Deserialize(sr);
StreamWriter sw = new StreamWriter("Test1.xml");
sw.Close();
【问题讨论】:
-
由于根元素名称不同,您可以为每个元素构建序列化程序并使用
XmlSerializer.CanDeserialize(XmlReader)来测试哪个适用。请参阅:How to deserialize XML if the return type could be an Error or Success object。 -
反映类型 'XMLSerializerTest.XML 出现错误 - 您能否请edit 分享一个重现异常的minimal reproducible example 的问题?另外,能否请您edit 将您的异常详细信息包含为文本而不是屏幕截图?堆栈溢出政策是您应该将代码、错误和数据(XML 等)作为文本而不是图像。原因见Why not upload images of code on SO when asking a question和Discourage screenshots of code and/or errors。
-
您不能在同一属性上方有两个方括号项。使用 XmlElement 或 XmlAttribute,不能同时使用。
标签: c# xml serialization deserialization