.net - 从 XSD 模式生成 C# 代码时,如何使数组具有 "Items"以外的名称?

标签 .net web-services xsd attributes code-generation

我正在开发一个项目,该项目必须连接到一些古老的 web 服务,这些服务将一些用于请求和响应的分层数据打包到分层 XML 的单个字符串中。

我一直在使用 xsd.exe 从示例请求和响应 XML 片段生成 XSD,在必要时修改它们以获得最佳定义,并再次使用 xsd.exe 生成 C# 对象。然后,调用 Web 服务的管理器可以将那些强类型请求对象作为参数,将它们序列化为字符串以进行调用,将响应作为字符串返回,将它们反序列化为强类型响应对象并返回这些对象。

如果我有一个字符串列表,我可以有一个有效的 XSD,它认为它是一个无界 xs:choice of xs:string 元素的复杂类型,然后它会简单地反序列化为一个字符串数组,这很好,而且处理简单。令人讨厌的问题是,出于某种原因,似乎没有任何方法可以让它调用字符串数组,而不是“Items”。不管 什么 我添加到架构中,我无法让 xsd.exe 写入任何其他名称。

这是一个示例 XSD 架构:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="AccountStatusRequest" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="AccountStatusRequest">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded" id="AccountRowIDs">
                <xs:element nillable="true" type="xs:string" id="AccountRowID" name="AccountRowID"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

结果类:
public partial class AccountStatusRequest {

    private string[] itemsField;

    [System.Xml.Serialization.XmlElementAttribute("AccountRowID", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
    public string[] Items {
        get {
            return this.itemsField;
        }
        set {
            this.itemsField = value;
        }
    }
}

我已经尝试将智能感知中的几乎所有 msdata: 属性添加到选择和内部元素,但没有任何区别。

只是为了论证,我向那个 complexType 添加了几个额外的类似选项,看看这是否会强制它使用字符串数组的名称,但它给了我 Items、Items1、Items2...

我真的不希望它必须是一个自己类型的数组,它只包含一个字符串,但我也真的不想让它被称为“项目”,没有 xml 注释(有谁知道如何添加 THOSE到 xsd?),什么时候它应该有一个更具描述性的名称。而且我绝对不能只是手动更改它,因为每当 Web 服务模式更改时,所需的工作流就是更改 XSD,然后从它们重新生成类。

这似乎是 xsd.exe 应该支持的另一种东西。有什么我想念的吗?我应该以某种方式采取不同的方法吗?或者有没有我可以使用的替代工具而不是那么蹩脚?

最佳答案

尝试将选择更改为序列,并将最小值/最大值出现在 AccountRowID 元素中...

关于.net - 从 XSD 模式生成 C# 代码时,如何使数组具有 "Items"以外的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/660533/

相关文章:

.net - 为 WP7 构建一个 .NET dll

c# - 有什么方法可以检查 XmlSchemaParticle 是否为 EmptyParticle?

xsd - 如何使用 libxml2 生成 XML 文件?

java - 如何使用基于 WSDL 的 Web 服务通知客户端(Java、C#)

java - axis2 中的数据绑定(bind)

web-services - REST API 设计 - 最佳实践 : Link existing child resource

XML XSD 十进制分数

c# - 为什么 VS 11 中的按钮点击速度很慢,如何解决?

c# - 在 C# 中通过 Google Apps 发送电子邮件

c# - Windbg .load 扩展需要路径中的转义反斜杠 (\) 字符