[英]Deserialize a XML fragment to class that has been generated by xsd.exe
我有一個要讀取的xml文件,然后解釋並轉換為從xsd工具生成的各個類。 這是我正在嘗試的步驟:
我正在粘貼迄今為止一直使用的代碼,在反序列化時似乎出現了一個異常, {“ XML文檔(0,0)中存在錯誤。”}
var doc = XDocument.Load(filePath);
var query2 = from b in doc.Root.Descendants()
select b;
foreach (var item in query2)
{
switch (item.Name.LocalName)
{
case "SomeStringValue":
XmlSerializer srz = new XmlSerializer(typeof(SomeClassGeneratedfromXSD));
var writer=item.CreateReader();
parameterFromFile.SomeProperty = (SomeClassGeneratedfromXSD)srz.Deserialize(writer);
//srz.Deserialize(item);
break;
我正在粘貼xsd的摘要:
<xs:complexType name="Parameters">
<xs:all>
<xs:element name="A">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="mstns:Restricted8CharString">
<xs:attribute name="Caption" use="required" fixed="Caption for A">
<xs:simpleType>
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ActionWhenMaxReached" use="required">
<xs:simpleType>
<xs:restriction base="xs:short">
<xs:pattern value="[1-3]"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Expression" type="xs:string" default="0" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="B">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:short">
<xs:attribute name="Caption" use="prohibited">
<xs:simpleType>
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ActionWhenMaxReached" use="required">
<xs:simpleType>
<xs:restriction base="xs:short">
<xs:pattern value="[1-3]"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Expression" type="xs:string" default="0" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
您的結束標簽不正確。 它應該是:
</xs:complexType>
並不是
</xs:complexType name="Parameters">
經過努力,我找到了解決方案:
實際上,我試圖解析一個內部元素,這是不正確的。 我已經有了xsd工具中的類,因此可以簡單地將代碼用作:
XmlSerializer serializer = new XmlSerializer(typeof(RootClass));
using (TextReader reader = new StreamReader(filePath))
{
RootClass parameterFromFile = (RootClass)serializer.Deserialize(reader);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.