XSDObjectGen.exe自动生成的代码中出现意外的__-前缀公共变量

时间:2009-04-09 10:38:36

标签: c# xsd code-generation xsd.exe

我使用XSDObjectGen.exe工具从xsd文件自动生成了一些类。我的类包含额外的公共变量,使用前导下划线命名,我无法弄清楚原因。

以下是xsd文件中的示例:

<xs:attribute name="Fare" type="xs:int" use="required">
    <xs:annotation>
        <xs:documentation>The fare price in pence</xs:documentation>
    </xs:annotation>
</xs:attribute>

相应的自动生成的C#代码是:

[XmlAttribute(AttributeName = "Fare", DataType = "int")]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public int __Fare;

[XmlIgnore]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public bool __FareSpecified;

[XmlIgnore]
public int Fare
{
    get { return __Fare; }
    set { __Fare = value; __FareSpecified = true; }
}

我理解所有这些代码,包括属性。但是,我不明白为什么它已经以这种方式实现。

  • 为什么此类序列化__Fare而不是Fare属性?在这种情况下,__Fare变量将是私有的(并重命名为_fare),或者可以使用自动属性。
  • __FareSpecified变量的目的是什么?

我们的感觉是__ - 前缀变量只会给使用这些类的开发人员带来不便,所以计划重写如下:

[XmlAttribute(AttributeName = "Fare", DataType = "int")]
public int Fare{ get; set;}

甚至只是:

[XmlAttribute]
public int Fare{ get; set;}

任何人都可以了解__ - 前缀变量背后的基本原理吗?

请注意,我们的xsd文件预计不会经常更改,因此我们重新自动生成这些类的能力并不重要。

修改

我在这里与团队进行了双重检查,这个源代码实际上是使用XSDObjectGen.exe生成的,而不是我原先说的xsd.exe。

1 个答案:

答案 0 :(得分:1)

它区分公共财产及其支持变量。

XSD为非可空类型执行XXXSpecified废话。

我不是XSD工具的特别粉丝,因为这样的东西。请查看XSDObjectGenWSDL.EXE,看看它们是否适合您。