gpt4 book ai didi

c# - 从使用 XSD.exe 生成的 XML 反序列化类

转载 作者:行者123 更新时间:2023-11-30 18:44:30 25 4
gpt4 key购买 nike

我有从 .xsd 生成的类(使用 xsd.exe),我可以很好地对其进行序列化,但是当我尝试反序列化它时,出现错误:

{"<XMLLanguages xmlns='http://tempuri.org/XMLLanguages.xsd'> was not expected."}

我已经搜索了几个小时,发现大多数人的问题在于没有在他们的 xsd/xml 中声明 namespace ,没有在他们的类中定义 namespace 等,但我找不到解决我的问题的方法。

这里是相关类的代码片段。

    <?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>

类:

    /// <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;
}
}
}

还有导致错误的 XML 行:

<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;
}

最佳答案

我使用下面的代码,它工作正常。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Report"
targetNamespace="http://www.xyz.com/Report.xsd"
elementFormDefault="qualified"
xmlns="http://www.xyz.com/Report.xsd"
xmlns:mstns="http://www.xyz.com/Report.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Report">
<xs:complexType>
...

我将 xsd.exe 与/n:xyz 命名空间选项结合使用。

这似乎工作正常,所以我认为您的问题一定出在 tempuri.org 域名上。

希望对您有所帮助。

理查德。

关于c# - 从使用 XSD.exe 生成的 XML 反序列化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com