1
我有,我已经使用Xsd2Code生成的C#对象第三方架构(其他选项,如XSD.EXE,XMLSpy的等要么崩溃或喷出的代码40MB,需要他们的图书馆工作)如何从多个名称空间获取XmlSerializer反序列化属性?
无论如何,这里的从架构的问题元件的一个例子:
<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被留空。