如何从多个名称空间中获取XmlSerializer反序列化属性?

时间:2010-04-23 14:05:15

标签: c# xml xml-serialization

我有来自第三方的模式,我使用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被保留为空。

1 个答案:

答案 0 :(得分:0)

我们提供的示例数据在命名空间中有一个拼写错误,导致它反序列化错误。去图。