c # serializacja - typ złożony zawierający prostą treść z atrybutami
Mam istniejące rozwiązanie, które wykorzystało svcutil do stworzenia zestawu klas opartych na schemacie XSD. Teraz muszę wprowadzić zmiany w tym schemacie i natknąłem się na blokadę.
Schemat zostanie rozszerzony o następujące typy:
<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>
Co spowodowałoby, że wynik XML byłby mniej więcej taki:
<Awkward>
<awkward1 id="z1">Dependent</awkward1>
<awkward2 id="z2">Independent</awkward2>
</Awkward>
SVCUtil dusi się podczas próby wygenerowania tego narzekania
„Typ„ AwkwardChild ”w przestrzeni nazw tt nie może zostać zaimportowany. Typy złożone z prostym rozszerzeniem treści nie są obsługiwane. Zmień schemat tak, aby typy mogły mapować na typy umów danych lub użyj ImporXmlType lub użyj innego serializatora.
I myślę, że rozumiem to, ponieważ próbuje wyprowadzić typ łańcucha, ale dołącza do niego atrybuty.
Próbuję dowiedzieć się, czy istnieje sposób, aby ręcznie kodować klasę w celu uzyskania tego rodzaju danych wyjściowych, ale nie mogę wymyślić sposobu, aby ciąg pojawił się jako „prosta treść” w węźle xml, a nie jako element podrzędny, np ta klasa:
[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; }
}
Czy ktoś mógłby wskazać mi właściwy kierunek?