我有一个现有的解决方案,它使用 svcutil 创建了一组基于 XSD 架构的类。我现在必须对该架构进行编辑,并且遇到了一些绊脚石。
该模式将使用以下类型进行扩展:
<xsd:complexType name="Awkward">
<xsd:sequence>
<xsd:element name="awkward1" type="tt:AwkwardChild" nillable="true">
</xsd:element>
<xsd:element name="awkward2" type="tt:AwkwardChild" nillable="true">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="AwkwardChild">
<xsd:simpleContent>
<xsd:extension base="tt:AwkwardChildType">
<xsd:attribute name="id" type="xsd:ID"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:simpleType name="AwkwardChildType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Dependent"/>
<xsd:enumeration value="In between"/>
<xsd:enumeration value="Independent"/>
</xsd:restriction>
</xsd:simpleType>
这将导致 XML 输出如下所示:
<Awkward>
<awkward1 id="z1">Dependent</awkward1>
<awkward2 id="z2">Independent</awkward2>
</Awkward>
SVCUtil 在尝试生成此抱怨时令人窒息
“无法导入命名空间 tt 中的 'AwkwardChild' 类型。不支持具有简单内容扩展的复杂类型。要么更改架构,以便类型可以映射到数据协定类型,要么使用 ImporXmlType 或使用不同的序列化程序。”
而且我认为我理解这一点,因为它试图输出字符串类型,但包含属性。
我试图弄清楚是否有一种方法可以手动编写一个类来实现这种输出,但我想不出一种方法让字符串在 xml 节点中显示为“简单内容”而不是作为子元素,例如这个类:
[DataContractAttribute(Name = "AwkwardChild", Namespace = "tt")]
public class Awkward
{
[DataContractAttribute(Name="id")]
public string id { get; set; }
//What do I put here to get this to appear as the content of
//the awkward node, not in an element?
public string nodecontent { get; set; }
}
有人能指出我正确的方向吗?