【问题标题】:Autogenerating classes for XSD containing an element which is a C# keyword为包含 C# 关键字元素的 XSD 自动生成类
【发布时间】:2016-07-08 12:52:21
【问题描述】:

我正在使用 XSD.exe 从 XSD -> C# 生成具有自动序列化功能的类。

XSD 的一个元素称为event,因为这是一个C# 关键字,所以生成的类名是@event。我从来不知道这甚至是一个有效的类名,但它很难看。

我知道我无法控制 XSD.exe 对类名的选择 - 它们映射到 XSD 元素名称。 但是有没有办法手动重命名我的@event 类,C#/.NET 仍然知道如何进行序列化?例如,我可以在类定义中添加一些属性吗?

显然,每次我重新生成类时,我都必须重做。

【问题讨论】:

    标签: c# xsd deserialization xsd.exe


    【解决方案1】:

    您可以使用控制序列化的属性来装饰类。

    请参阅此 MSDN 文章:https://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx

    MSDN 文章对类名有这样的说法:

    有两个属性可以应用于一个类(并且只有一个 类):XmlRootAttribute 和 XmlTypeAttribute。这些属性是 非常相似。 XmlRootAttribute 只能应用于一个类: 序列化时表示 XML 文档打开的类 和关闭元素——换句话说,根元素。这 另一方面,XmlTypeAttribute 可以应用于任何类, 包括根类。

    [XmlRoot("NewGroupName")]
    [XmlType("NewTypeName")]
    public class Group{
        public Employee[] Employees;
    }
    

    如果编译了这个类,并且使用了 XML Schema Definition 工具 要生成其架构,您会发现以下 XML 描述 组。

    <xs:element name="NewGroupName" type="NewTypeName">
    

    相反,如果要序列化类的实例,只需 可以在 XML 文档中找到 NewGroupName。

    <NewGroupName>
        . . .
    </NewGroupName>
    

    【讨论】:

    • 通常不赞成仅链接的答案(以防链接损坏)。能举个小例子吗?
    • 我已经更新了链接的 MSDN 页面中与问题相关的示例
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多