我有下面的类:C#反序列化问题
/// <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>
而且我用这个类型化的方法来反序列化(通过调用反序列化<SSN_ReceiptType>(xmlGoesHere)) :
/// <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:< SSN_Receipt的xmlns = '瓮:eu.emsa.ssn'预计不会出现>。
到底是什么? :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>
请注意你的语言。这是一个社区论坛。 – 2010-11-12 15:09:15
删除的语言... – 2010-11-12 15:11:53
xsd文件之间有什么区别? – Kell 2010-11-12 15:14:40