2012-03-08 33 views
27

Khi tôi tạo ra một lớp C# từ một lược đồ xsd với xsd.exe tôi tìm thấy điều này một chút khó hiểu.Tại sao xsd.exe tạo thuộc tính chuỗi cho xs: integer?

yếu tố của tôi:

<xs:element name="InvoiceNo" type="xs:integer"/> 

được tạo ra để:

[System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=5)] 
public string InvoiceNo 
{ 
    ... 
} 

Tại sao mà tài sản không tạo ra như một int thay vì chuỗi?

Trả lời

54

Hành vi này là by design:

Loại xs:integer được quy định như một số không có trên hoặc dưới ràng buộc về kích thước của nó. Vì lý do này, không phải chuỗi tuần tự hóa XML cũng như không xác thực bản đồ này với loại System.Int32. Thay vào đó, XML serialization ánh xạ xs:integer thành một chuỗi trong khi xác nhận bản đồ nó vào Decimal loại có nghĩa là lớn hơn nhiều so với bất kỳ các loại nguyên trong .NET Framework

Sử dụng xs:int, mà là một ký 32-bit số nguyên, có Xsd.exe bản đồ nó vào một System.Int32:

<xs:element name="InvoiceNo" type="xs:int" /> 

Dưới đây là một detailed list của các kiểu dữ liệu được định nghĩa trong tiêu chuẩn định nghĩa lược đồ XML.

+1

Phát ngay. Tôi đã không nhận thức được sự khác biệt giữa xs: int và xs: integer. Tôi nghĩ nó giống như int và Int32 trong C#. – Glenn

+0

Hiện tại, chúng tôi gặp sự cố khi cố gắng gửi dữ liệu hợp lệ đến các dịch vụ của TIBCO. Tất nhiên TIBCO sẽ không thay đổi vì vậy chúng tôi có, tuyệt vời. –

+0

Họ chắc chắn nên sử dụng System.Numerics.BigInteger cho điều đó! – dimaaan

Các vấn đề liên quan