gpt4 book ai didi

c# - 使用 XSD/代码生成的 XML 反序列化 - 解析错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:27 26 4
gpt4 key购买 nike

我正在尝试使用 XSD 反序列化 XML 文档。我得到的错误是:

"There is an error in XML document (22, 8)."

InnerException

"Input string was not in a correct format."

现在,我的示例 XML 文档的第 22 行就是这样的:

<PremiumPaymentDate>2012-08-08</PremiumPaymentDate>

据我所知,这没什么问题。 XSD 类似地指定此行:

<xs:element name="PremiumPaymentDate" type="xs:date" minOccurs="0"/>

它试图映射到的属性如下所示:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime PremiumPaymentDate {
get {
return this.premiumPaymentDateField;
}
set {
this.premiumPaymentDateField = value;
}
}

我试过完全删除这个字段,从 XSD 重新生成代码文件,更改 XSD,更改 minOccurs 值,更改字段格式,完全删除字段数据,没有任何效果。

我还想知道为什么直到第 22 行一切正常,因为它们在这个行上方大约 17 个字段工作正常,其中一些是以完全相同的方式设置的日期。这个只是出于某种原因不想解析。

编辑:

这些日期有效。这些在文档中的相关日期之上。这是有效的 XSD:

<xs:element name="effectivedate" type="xs:date" minOccurs="1"/>

下面是相同的示例 XML:

<effectivedate>2012-06-08</effectivedate>

以及它的代码属性:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime effectivedate {
get {
return this.effectivedateField;
}
set {
this.effectivedateField = value;
}
}

有什么想法吗?

最佳答案

你能检查前一个节点是否存在吗?

可能错误不在该节点中,但您的模式期望出现在该节点之前的其他节点,但它不存在。

例如如果你的xsd低于

...
<xs:element name="someelsenode" type="xs:date" minOccurs="1"/>
<xs:element name="missingnode" type="xs:date" minOccurs="1"/>
<xs:element name="effectivedate" type="xs:date" minOccurs="1"/>
...

但是你的 xml 看起来像下面这样

...
<someelsenode>2012-06-08</someelsenode>
<effectivedate>2012-06-08</effectivedate>
...

然后您可以得到“XML 文档 (22, 8) 中存在错误。”错误。这将引用正确的节点行和列,但实际上它想说的是另一个节点不存在。

所以之前<effectivedate>2012-06-08</effectivedate>必须有 <missingnode>2012-06-08</missingnode>

关于c# - 使用 XSD/代码生成的 XML 反序列化 - 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651260/

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