내가 가진 내가 잘 직렬화 수 있지만 시도하고 직렬화 때, 나는 오류 내려면 .XSD에서 (xsd.exe를 사용하여) 생성 된 클래스 :역 직렬화 클래스는 XSD.exe
{"<XMLLanguages xmlns='http://tempuri.org/XMLLanguages.xsd'> was not expected."}
을
몇 시간 동안 검색 한 결과 xsd/xml에서 네임 스페이스를 선언하지 않고 자신의 클래스에 네임 스페이스를 정의하지 않는 등 대부분의 사람들의 문제가 발견되었지만 문제에 대한 해결책을 찾을 수 없습니다.
다음은 관련 클래스에 대한 코드 스 니펫입니다.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLLanguages"
targetNamespace="http://tempuri.org/XMLLanguages.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLLanguages.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="XMLLanguages">
<xs:complexType>
<xs:sequence>
<xs:element name="Tier" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="L" minOccurs="1" maxOccurs="unbounded" type="Language"/>
</xs:sequence>
<xs:attribute name="TierID" type="xs:int"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Language">
<xs:sequence>
<xs:element name="LangID" type="xs:int"/>
<xs:element name="Tier" type="xs:int"/>
<xs:element name ="Name" type="xs:string"/>
</xs:sequence>
<xs:attribute name ="PassRate" type="xs:int"/>
</xs:complexType>
</xs:schema>
그리고 클래스 : 오류의 원인 XML에
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://tempuri.org/XMLLanguages.xsd")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://tempuri.org/XMLLanguages.xsd", IsNullable = false)]
public partial class XMLLanguages
{
private List<XMLLanguagesTier> tierField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Tier")]
public List<XMLLanguagesTier> Tiers {
get {
return this.tierField;
}
set {
this.tierField = value;
}
}
}
그리고 라인 :
<XMLLanguages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/XMLLanguages.xsd">
직렬화 복원 방법 : 나는 다음과 같은 코드를 사용
public static object Deserialize(XmlDocument xml, Type type)
{
XmlSerializer s = new XmlSerializer(type);
string xmlString = xml.OuterXml.ToString();
byte[] buffer = ASCIIEncoding.UTF8.GetBytes(xmlString);
MemoryStream ms = new MemoryStream(buffer);
XmlReader reader = new XmlTextReader(ms);
Exception caught = null;
try
{
object o = s.Deserialize(reader);
return o;
}
catch (Exception e)
{
caught = e;
}
finally
{
reader.Close();
if (caught != null)
throw caught;
}
return null;
}
코드 조각이 실제로 역 직렬화를 수행하는지 보여줄 수 있습니까? deserialization 코드에서 XML 네임 스페이스 "http://tempuri.org/XMLLanguages.xsd"에주의를 기울이고 관심을 기울이고 있습니까? –
에서 편집 됨. – heap