【发布时间】:2010-11-12 15:08:27
【问题描述】:
我有以下课程:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:eu.emsa.ssn")]
public partial class SSN_ReceiptType {
private Header1Type headerField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public Header1Type Header {
get {
return this.headerField;
}
set {
this.headerField = value;
}
}
}
还有以下 XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SSN_Receipt xmlns="urn:eu.emsa.ssn">
<Header StatusMessage="SomethingSomething" StatusCode="Blabla" SSNRefId="N/A" MSRefId="2674762" Version="2.0" To="NCANOHAU1" SentAt="2010-11-12T14:48:44Z" From="SSN"/>
</SSN_Receipt>
我使用这种类型化的方法进行反序列化(通过调用 Deserialize
/// <summary>
/// Deserialize xml string to object of type T
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <returns></returns>
public static T Deserialize<T>(string xml)
{
try
{
// Create serializer
var xs = new XmlSerializer(typeof(T));
// Deserialize
T t = (T)xs.Deserialize(new StringReader(xml));
return t;
}
catch (Exception e)
{
log.Error(string.Format("Unable to deserialize XML: {0}", xml), e);
return default(T);
}
}
现在这是踢球者。这曾经奏效。但最近我们收到了用于生成类的 XSD 的新版本,在生成新代码后(该类未更改,如上所示)我在尝试反序列化时收到以下异常:
System.SystemException: "XML 文档中存在错误 (1, 57)"
此外:
System.InnerException:
不是预期的。
什么鬼? :S 我尝试添加一个指定“SSN_Receipt”的 XmlRootAttribute,但一点帮助都没有。有谁知道怎么回事?
更新:XSD 中的相关部分:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ssn="urn:eu.emsa.ssn"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="urn:eu.emsa.ssn">
[...]
<xsd:element name="SSN_Receipt" type="ssn:SSN_ReceiptType"/>
[...]
<xsd:complexType name="SSN_ReceiptType">
<xsd:annotation>
<xsd:documentation xml:lang="en"/>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Header" type="ssn:Header1Type"/>
</xsd:sequence>
</xsd:complexType>
【问题讨论】:
-
请注意您的语言。这是一个社区论坛。
-
xsd文件有什么区别?
-
@Dan Puzey:tvanfosson 打败了你。 :)
-
您能列出新的 XSD 吗?部分吗? (根元素和你的元素定义)
-
@Evan:对不起,不会再发生了。
标签: c# xml serialization xml-serialization