Serialization.XmlChoiceIdentifierAttribute
|
|
Âòîðíèê, 22 Èþíÿ 2010 ã. 14:30
+ â öèòàòíèê
Èíîãäà ïîÿâëÿåòñÿ íåîáõîäèìîñòü ñîçäàòü ñåðâèñ, êîòîðûé â SOAP ñåðèàëèçàöèè èìååò íà îäíîì è òîì æå ìåñòå òî îäèí òåã, òî äðóãîé â çàâèñèìîñòè îò ñîñòîÿíèÿ îáúåêòà. Îäíàêî, åñëè ñäåëàòü âñå êàê íàïèñàíî â äîêóìåíòàöèè, êîä ïðèìåðà èäåò íèæå, òî ìîæíî ïîëó÷èòü ñîâñåì íå òî, ÷òî õîòåëîñü áû. Êëàññ äëÿ WCF, ðåàëèçîâàííûé â âèäå:
Copy Source | Copy HTML- [System.SerializableAttribute()]
- [System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://blabla")]
- public partial class ClassName
- {
- private string itemField;
- private ItemChoiceType itemElementNameField;
-
- /// <remarks/>
- [System.Xml.Serialization.XmlElementAttribute("Choose1", typeof(string), Order = 0)]
- [System.Xml.Serialization.XmlElementAttribute("Choose2", typeof(string), Order = 0)]
- [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
- public string Item
- {
- get
- {
- return this.itemField;
- }
- set
- {
- this.itemField = value;
- }
- }
-
- /// <remarks/>
- [System.Xml.Serialization.XmlElementAttribute(Order = 1)]
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- public ItemChoiceType ItemElementName
- {
- get
- {
- return this.itemElementNameField;
- }
- set
- {
- this.itemElementNameField = value;
- }
- }
- }
-
- [System.SerializableAttribute()]
- [System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://blabla", IncludeInSchema = false)]
- public enum ItemChoiceType
- {
- Choose1,
- Choose2,
- }
Äàñò ïðèìåðíî ñëåäóþùþþ ñòðóêòóðó xsd, â êîòîðîé âîïðåêè íàøåé âîëè âèäà XmlIgnore äîïîëíèòåëüíîå ïîëå âñåòàêè ïîìåùàåòñÿ â âûäà÷ó:
Copy Source | Copy HTML- <xs:complexType name="ClassName">
- <xs:sequence>
- <xs:element name="itemElementNameField" type="tns:ItemChoiceType"/>
- <xs:element name="itemField" nillable="true" type="xs:string"/>
- </xs:sequence>
- </xs:complexType>
- <xs:element name="ClassName" nillable="true" type="tns:ClassName"/>
- <xs:simpleType name="ItemChoiceType">
- <xs:restriction base="xs:string">
- <xs:enumeration value="Choose1"/>
- <xs:enumeration value="Choose2"/>
- </xs:restriction>
- </xs:simpleType>
Ðåøåíèå ýòîé ïðîáëåìû êðîåêòñÿ â çàäàíèè äåôîëòíîãî ñåðèàëàéçåðà ïðè ïîìîùè òýãà XmlSerializerFormatAttribute, âûñòàâëÿåìîãî ó ìåäîòà èíòåðôåéñà WCF ñåðâèñà. Íå çíàÿ ýòîãî ìîæíî äîëãî áèòüñÿ íàä ïîÿâëÿíèåì ëèøíåãî â âûäà÷å SOAP.
Ìåòêè:
code
-
Çàïèñü ïîíðàâèëàñü
-
0
Ïðîöèòèðîâàëè
-
0
Ñîõðàíèëè
-