C# xsd.exe将我的自定义类型替换为字符串

C# xsd.exe将我的自定义类型替换为字符串,c#,.net,xml,xsd,C#,.net,Xml,Xsd,我正在使用xsd.exe从xsd模式生成一个C#类。以下是我在模式中的内容: <xs:element name="SyslogServerSettings" type="SyslogServerType"/> <xs:complexType name="SyslogServerType"> <xs:annotation> <xs:appinfo> <meta:ve

我正在使用xsd.exe从xsd模式生成一个C#类。以下是我在模式中的内容:

<xs:element name="SyslogServerSettings" type="SyslogServerType"/>
    <xs:complexType name="SyslogServerType">
        <xs:annotation>
            <xs:appinfo>
                <meta:version added-in="5.11" />
                <meta:content-type>application/vnd.vmware.vcloud.SyslogSettings</meta:content-type>
            </xs:appinfo>
            <xs:documentation source="since">5.11</xs:documentation>
            <xs:documentation xml:lang="en">
                Allows a user to configure syslog server settings for the gateway
            </xs:documentation>
        </xs:annotation>

        <xs:complexContent>
            <xs:extension base="VCloudExtensibleType">
                <xs:sequence>
                    <xs:element name="TenantSyslogServerSettings"
                        type="TenantSyslogServerSettingsType" minOccurs="0"
                        maxOccurs="1">
                        <xs:annotation>
                            <xs:appinfo>
                                <meta:version added-in="5.11" />
                            </xs:appinfo>
                            <xs:documentation source="modifiable">always
                            </xs:documentation>
                            <xs:documentation xml:lang="en">
                                Tenant syslog server settings
                            </xs:documentation>
                            <xs:documentation source="required">false
                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

应用程序/vnd.vmware.vcloud.SyslogSettings
5.11
允许用户为网关配置syslog服务器设置
总是
租户系统日志服务器设置
假的
以及租户SyslogServerSettings的定义:

<xs:complexType name="TenantSyslogServerSettingsType">
        <xs:annotation>
            <xs:documentation source="since">5.11</xs:documentation>
            <xs:documentation xml:lang="en">
                Tenant syslog server settings.
                If logging is configured for firewall rules, the logs will be directed to these syslog servers
                along with the provider syslog servers.
                Only one tenant syslog server ip can be configured.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="SyslogServerIp" type="IpAddressType" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation source="modifiable">always</xs:documentation>
                    <xs:documentation xml:lang="en">
                        syslog server ip address.
                    </xs:documentation>
                    <xs:documentation source="required">false</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

5.11
租户系统日志服务器设置。
如果为防火墙规则配置日志记录,则日志将定向到这些syslog服务器
以及提供程序syslog服务器。
只能配置一个租户syslog服务器ip。
总是
系统日志服务器ip地址。
假的
另一方面,IpAddressType定义为:

<xs:simpleType name="IpAddressType">
        <xs:annotation>
            <xs:documentation source="since">0.9</xs:documentation>
            <xs:documentation xml:lang="en">
                A valid IPv4 address or "Any".
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
        </xs:restriction>
    </xs:simpleType>

0.9
有效的IPv4地址或“任意”。
在最终生成的C#类中,我得到:

[System.Xml.Serialization.XmlRootAttribute("SyslogServerSettings", Namespace="http://www.vmware.com/vcloud/v1.5", IsNullable=false)]
    public partial class SyslogServerType : VCloudExtensibleType {

        private string[] tenantSyslogServerSettingsField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("SyslogServerIp", IsNullable=false)]
        public string[] TenantSyslogServerSettings {
            get {
                return this.tenantSyslogServerSettingsField;
            }
            set {
                this.tenantSyslogServerSettingsField = value;
            }
        }
    }
[System.Xml.Serialization.XmlRootAttribute(“SyslogServerSettings”,Namespace=”http://www.vmware.com/vcloud/v1.5“,IsNullable=false)]
公共部分类SyslogServerType:VCloudExtensibleType{
私有字符串[]租户SyslogServerSettingsField;
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“SyslogServerIp”,IsNullable=false)]
公共字符串[]租户SyslogServerSettings{
得到{
返回此.tenantsyslogserversettings字段;
}
设置{
this.tenantSyslogServerSettingsField=值;
}
}
}

我可以得到用字符串[]替换自定义类型背后的逻辑,但这不是我想要的。我还希望生成自定义类型TenantSyslogServerSettings,即使它只是一个包含一个字符串属性的类。如何使xsd.exe生成它?

您的定义不是关于具有字符串属性的类。它是关于从字符串继承的类型。这是您的问题(因为字符串是密封类)。您是指IpAddressType吗?它实际上是从字符串继承的类型。但是TenantSyslogServerSettingsType应该是一个自定义类型,包含string属性(它是一个ComplexType,包含一个IpAddressType(string)属性)。