gpt4 book ai didi

c# - 将 xsd 枚举转换为 C#

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:22 28 4
gpt4 key购买 nike

我有一个 xsd 文件,我从中生成一个 C# 类。为了提供更容易的维护,我只想在 xsd 文件中定义一个枚举,这样当我必须更改枚举时,我只需要在一个地方更新它。我知道如何创建枚举,但是当生成 C# 代码时,我需要枚举成员具有自定义值,因此结果类似于:

public enum SetupTypeEnum {
None = 0,
NewInstall = 1,
Modify = 2,
Upgrade = 4,
Uninstall = 8
}

有什么方法可以编写 xsd 来实现这一点吗?

最佳答案

您可以将特定于代码生成的注释(这仅适用于 svcutil,不适用于 xsd.exe)添加到您的 xsd 文件。您的枚举的 xsd 定义将是这样的:

<xs:simpleType name="SetupTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="None">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">0</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="NewInstall">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
...
</xs:restriction>
</xs:simpleType>

这些注释允许您显式定义每个枚举值的数值。你可以找到一个例子 on this msdn page如果您搜索“EnumerationValue”。

更新:John Saunders 在他的评论中正确指出,如果您使用 xsd.exe,这将不起作用。但是,如果您使用 svcutil.exe 创建 C# 代码,则注释将起作用。

使用 svcutil.exe 的例子:

svcutil /dconly "D:\test.xsd" /o:"D:\test.cs"

如果您使用 svcutil 而不是 xsd.exe,那么生成的代码会略有不同。最重要的区别是 svcutil 将为 DataContractSerialization 而不是 XmlSerialization 生成属性。

关于c# - 将 xsd 枚举转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com