C# XSD.exe生成类型为Object而不是XSD定义类型的类
我正在进行一个集成,从外部API接收xml文件形式的数据。我使用XSD.exe从关联的XSD文件生成C#类。我获取XmlDocument,将其序列化到类定义的适当对象中,并可以作为类的属性访问所有元素。但是,该类将每个元素定义为类型对象,而不是XSD中给定的数据类型。这会阻止我访问数据或写入适当的新数据。为什么XSD.exe不使用定义的类型?XSD.exe是否有一些设置我没有注意到?是否有方法将在对象中找到的数据转换为适当的数据类型 Xml示例:C# XSD.exe生成类型为Object而不是XSD定义类型的类,c#,xml,visual-studio-2013,xsd,xsd.exe,C#,Xml,Visual Studio 2013,Xsd,Xsd.exe,我正在进行一个集成,从外部API接收xml文件形式的数据。我使用XSD.exe从关联的XSD文件生成C#类。我获取XmlDocument,将其序列化到类定义的适当对象中,并可以作为类的属性访问所有元素。但是,该类将每个元素定义为类型对象,而不是XSD中给定的数据类型。这会阻止我访问数据或写入适当的新数据。为什么XSD.exe不使用定义的类型?XSD.exe是否有一些设置我没有注意到?是否有方法将在对象中找到的数据转换为适当的数据类型 Xml示例: <?xml version="1.0"
<?xml version="1.0" encoding="UTF-8" ?>
- <xmldata>
- <Orders>
<OrderID>1</OrderID>
<AccountNumber />
<AccountType />
<AddressValidated>Y</AddressValidated>
<Affiliate_Commissionable_Value>45.0000</Affiliate_Commissionable_Value>
<AuthHash>a3d2f5c2599fc38e5f211ea52abc1040</AuthHash>
<BankName />
<BillingAddress1>123 St.</BillingAddress1>
<BillingAddress2>United States of America</BillingAddress2>
<BillingCity>Metropolis</BillingCity>
<BillingCompanyName />
<BillingCountry>United States</BillingCountry>
<BillingFaxNumber />
<BillingFirstName>Firsty</BillingFirstName>
<BillingLastName>Lasty</BillingLastName>
<BillingPhoneNumber>1234567890</BillingPhoneNumber>
<BillingPostalCode>12345</BillingPostalCode>
<BillingState>US</BillingState>
`...
-
-
1.
Y
45
a3d2f5c2599fc38e5f211ea52abc1040
123街。
美利坚合众国
大都市
美国
首先
整形术
1234567890
12345
美国
`...
示例XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="xmldata" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
<xs:element name="xmldata" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Orders">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" msprop:SqlDbType="Int" name="OrderID" msprop:TableNameXsd="Orders" msprop:IsIdentity="true" msprop:SQLTableAlias="o" />
<xs:element name="AccountNumber" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="64" />
<xs:element name="AccountType" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="10" />
<xs:element name="AddressValidated" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="1" />
<xs:element name="Affiliate_Commissionable_Value" msprop:SqlDbType="Money" minOccurs="0" msprop:SQLTableAlias="o" />
<xs:element name="AuthHash" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="40" />
<xs:element name="AVS" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="25" />
<xs:element name="BankName" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="128" />
<xs:element name="BatchNumber" msprop:SqlDbType="Int" minOccurs="0" msprop:SQLTableAlias="o" />
<xs:element name="BillingAddress1" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="75" />
<xs:element name="BillingAddress2" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="75" />
<xs:element name="BillingCity" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="45" />
<xs:element name="BillingCompanyName" msprop:SqlDbType="VarChar" minOccurs="0" msprop:SQLTableAlias="o" msprop:maxLength="100" />
自动生成的C#类(注意对象数据类型)
。。。
公共部分类xmldata
{
私有xmldataOrders[]项字段;
///
[System.Xml.Serialization.xmlementAttribute(“Orders”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
公共数据订单[]项
{
得到
{
返回此.itemsField;
}
设置
{
this.itemsField=值;
}
}
}
///
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”、“4.0.30319.33440”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类xmldataOrders
{
私有对象orderdField;
私有对象accountNumberField;
私有对象accountTypeField;
私有对象addressValidatedField;
私有对象关联方可委托值字段;
私有对象authHashField;
私有对象aVSField;
私有对象bankname字段;
私有对象batchNumberField;
私有对象计费地址1字段;
私有对象计费地址2字段;
私有对象billingCityField;
私有对象billingCompanyNameField;
私有对象billingCountryField;
私有对象billingFaxNumberField;
私有对象billingFirstNameField;
...
XSD中定义的元素都没有type
属性,因此XSD不知道它们是什么类型。SqlDbType
属性不是任何XML规范的一部分,它是一些扩展。@CharlesMager有没有办法让XSD.exe识别SqlDbTypes,或者XML标准中有没有等效的数据类型?没有这里有支持这些扩展的类似于Xsd.exe的工具吗?我不知道。我唯一能想到的建议是使用LINQ to XML来处理模式XML,并基于SqlDbType
添加type
属性。因此,您需要映射Int->integer,VarChar->string。然后您将有一个“新”Xsd来使用x进行处理sd.exe。
...
public partial class xmldata
{
private xmldataOrders[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Orders", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public xmldataOrders[] Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class xmldataOrders
{
private object orderIDField;
private object accountNumberField;
private object accountTypeField;
private object addressValidatedField;
private object affiliate_Commissionable_ValueField;
private object authHashField;
private object aVSField;
private object bankNameField;
private object batchNumberField;
private object billingAddress1Field;
private object billingAddress2Field;
private object billingCityField;
private object billingCompanyNameField;
private object billingCountryField;
private object billingFaxNumberField;
private object billingFirstNameField;
...