【发布时间】:2012-05-16 15:34:47
【问题描述】:
我尝试反序列化以下相当简单的 XML:
<props xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://foo.com/bar">
<prop name="foo1" xsi:type="xsd:string">bar1</prop>
<prop name="foo2" xsi:type="xsd:int">2</prop>
</props>
当我在此 XML 上运行 XSD.exe 以生成架构,然后再次运行以生成 C# 类时,我最终得到了以下经过高度修饰的版本:
public partial class props
{
[XmlElement("prop", IsNullable = true)]
propsProp[] Items { get; set; }
}
public partial class propsProp
{
[XmlAttribute]
public string name { get; set; }
[XmlText]
public string Value { get; set; }
}
现在,当我尝试使用 XmlSerializer 将 XML 反序列化为这些类时,出现以下异常:
System.InvalidOperationException:XML 文档中存在错误 (4, 4)。 --->
System.InvalidOperationException:无法识别指定的类型:name='string',namespace='http://www.w3.org/2001/XMLSchema',在.
xsi:type 属性可能是为了促进 prop 值的一些多态性,但我不在乎 - 我只想要 C# 属性中的值。
我在这里做错了什么?如何将该 XML 放入 C# 类中?
【问题讨论】:
-
我不确定如果没有额外的努力,这将如何工作,因为除非您使用泛型
(propsProp<T> - public T Value { get; set; },否则该类不能具有int和string的值。跨度> -
这似乎表明
XmlSerializer根本不适用于xsi:type?如果有帮助,我很乐意在反序列化中忽略它..? -
所以您永远不必将其序列化回原始 XML?
-
就我而言,我不会。 (但很好。)
标签: .net xml-serialization xmlserializer