Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XSD.exe生成类型为Object而不是XSD定义类型的类_C#_Xml_Visual Studio 2013_Xsd_Xsd.exe - Fatal编程技术网

C# XSD.exe生成类型为Object而不是XSD定义类型的类

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"

我正在进行一个集成,从外部API接收xml文件形式的数据。我使用XSD.exe从关联的XSD文件生成C#类。我获取XmlDocument,将其序列化到类定义的适当对象中,并可以作为类的属性访问所有元素。但是,该类将每个元素定义为类型对象,而不是XSD中给定的数据类型。这会阻止我访问数据或写入适当的新数据。为什么XSD.exe不使用定义的类型?XSD.exe是否有一些设置我没有注意到?是否有方法将在对象中找到的数据转换为适当的数据类型

Xml示例:

  <?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;
...