我有一个简单的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字段并仍然得到强制转换错误。