如何忽略GDB中缺少的调试符号?

时间:2018-11-07 14:24:44

标签: c# xml serialization xsd

我正在使用XML作为当前正在使用的C#应用​​程序的配置格式。为了避免每当我进行一些小改动时都手动维护XSD和XML,我决定创建一堆序列化类来为我做所有处理。现在,由于.NET提供的xsd工具似乎忽略了某些事情(例如,唯一值的定义),因此我试图将所有内容从模式移至C#代码。

在XSD中,定义了以下xs:complexType类型:

<xs:complexType name="ServiceType">
    <xs:attribute name="uri" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Service1" />
          <xs:enumeration value="Service2" />
          <xs:enumeration value="Service3" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
</xs:complexType>

然后在以下xs:element中使用该类型:

<xs:element name="Services">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Service" type="ServiceType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:unique name="unique-serviceUri">
    <xs:selector xpath="Service" />
    <xs:field xpath="@uri" />
  </xs:unique>
</xs:element>

如您所见,来自uri的{​​{1}}属性被定义为唯一。枚举用于限制可能的值,而唯一性用于确保值不会出现多次。

我刚刚发现ServiceType很容易在C#中序列化:

Enum

现在的问题是,我不仅要限制值,而且使像以前的架构中一样无法多次使用[Serializable] public class Service { public Service() { this.uri = ServiceUri.Invalid; } public enum ServiceUri { Service1, Service2, Service3, [NonSerialized] Invalid }; [XmlAttribute("uri")] public ServiceUri uri { get; set; } }

关于序列化,我经验很少。这看起来很像Service1的情况,但我不知道如何将其合并到C#中,以便序列化产生我一开始就发布的XSD代码段。这会在实际上包含Dictionary元素列表的类中发生:

Service

0 个答案:

没有答案