使用xsd.exe生成的模式反序列化XML时使用类型转换时出错

时间:2014-10-19 11:15:32

标签: c# xml xsd

我有一个简单的XML:

<?xml version="1.0" encoding="utf-8"?>
<room>
  <item type="computer">
    <x-coord>1</x-coord>
    <y-coord>2</y-coord>
  </item>
  <item type="chair">
    <x-coord>4</x-coord>
    <y-coord>5</y-coord>
  </item>
</room>

我已经为它生成了XML Schema,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="room" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="room" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="item">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="x-coord" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
              <xs:element name="y-coord" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
            </xs:sequence>
            <xs:attribute name="type" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

因为我希望我的x-coord和y-coord字段保存Integer值,所以我将xs:string更改为xs:int,如下所示:

<xs:element name="x-coord" type="xs:int" minOccurs="0" msdata:Ordinal="0" />
<xs:element name="y-coord" type="xs:int" minOccurs="0" msdata:Ordinal="1" />

我已经读过这个应该保留Int32值的地方,所以我改变了我生成的Room.cs:

 [System.Xml.Serialization.XmlElementAttribute("y-coord", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public System.Int32 ycoord
    {
        get {
            return this.ycoordField;
        }
        set {
            this.ycoordField = value;
        }
    }

表示x和y坐标。 但是,我仍然遇到强类型和强制类型错误的错误:

+       _x_coord    '(new System.Linq.SystemCore_EnumerableDebugView<NA2.room.itemRow>(this.Items.tableitem)).Items[0]._x_coord' threw an exception of type 'System.Data.StrongTypingException' int {System.Data.StrongTypingException}

+       base    {System.Data.StrongTypingException: The value for column 'x-coord' in table 'item' is DBNull. ---> System.InvalidCastException: Specified cast is not valid.

它仅适用于xs:string和public String ycoord。只有这样才能存储没有任何错误的值,但这不是我想要的。

你知道这里的问题在哪里吗?

编辑:当我在XSD中生成类型为int的Room.cs时,我有int字段并仍然得到强制转换错误。

0 个答案:

没有答案