我有来自第三方的模式,我使用Xsd2Code生成了c#对象(xsd.exe,xmlspy等其他选项崩溃或者需要使用其库工作的40mb代码)
无论如何,这是一个来自架构的问题元素的例子:
<xsd:schema xmlns:ns1="something" xmlns:ns2="somethinelse" targetNamespace="something">
<xsd:complexType name="someType">
<xsd:sequence>
<xsd:element ref="element1" />
<xsd:element ref="ns2:element2" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
生成的包装类如下所示:
[XmlType(Namespace="something")]
[XmlRoot("someType", Namespace="something", IsNullable=false)]
public partial class SomeType {
public string Element1 { get; set; }
[XmlElement(Namespace="somethinelse")]
public string Element2 { get; set; }
}
使用所述架构的示例xml:
<someType>
<element1>SomeValue</element1>
<ns2:element2>SomeValue2</element2>
</someType>
(任何错误都是我输入示例。架构有效且不可更改)
现在问题。当我尝试像这样反序列化xml:
XmlSerializer ser = new XmlSerializer(typeof(SomeType));
XmlReader reader = XmlReader.Create(new StringReader(xmlString))
SomeType obj = (SomeType)ser.Deserialize(reader)
生成的对象正确序列化,将“ns2”添加到需要它的元素。但是,在反序列化时,element1被设置并且element2被保留为空。
答案 0 :(得分:0)
我们提供的示例数据在命名空间中有一个拼写错误,导致它反序列化错误。去图。