-Ìóçûêà

 -Ïîäïèñêà ïî e-mail

 

 -Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â Flashr

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 26.02.2007
Çàïèñåé:
Êîììåíòàðèåâ:
Íàïèñàíî: 6574


Serialization.XmlChoiceIdentifierAttribute

Âòîðíèê, 22 Èþíÿ 2010 ã. 14:30 + â öèòàòíèê
Èíîãäà ïîÿâëÿåòñÿ íåîáõîäèìîñòü ñîçäàòü ñåðâèñ, êîòîðûé â SOAP ñåðèàëèçàöèè èìååò íà îäíîì è òîì æå ìåñòå òî îäèí òåã, òî äðóãîé â çàâèñèìîñòè îò ñîñòîÿíèÿ îáúåêòà. Îäíàêî, åñëè ñäåëàòü âñå êàê íàïèñàíî â äîêóìåíòàöèè, êîä ïðèìåðà èäåò íèæå, òî ìîæíî ïîëó÷èòü ñîâñåì íå òî, ÷òî õîòåëîñü áû. Êëàññ äëÿ WCF, ðåàëèçîâàííûé â âèäå:
Copy Source | Copy HTML
  1. [System.SerializableAttribute()]
  2.     [System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://blabla")]
  3.     public partial class ClassName
  4.     {
  5.         private string itemField;
  6.         private ItemChoiceType itemElementNameField;
  7.  
  8.         /// <remarks/>
  9.         [System.Xml.Serialization.XmlElementAttribute("Choose1", typeof(string), Order =  0)]
  10.         [System.Xml.Serialization.XmlElementAttribute("Choose2", typeof(string), Order =  0)]
  11.         [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
  12.         public string Item
  13.         {
  14.             get
  15.             {
  16.                 return this.itemField;
  17.             }
  18.             set
  19.             {
  20.                 this.itemField = value;
  21.             }
  22.         }
  23.  
  24.         /// <remarks/>
  25.         [System.Xml.Serialization.XmlElementAttribute(Order = 1)]
  26.         [System.Xml.Serialization.XmlIgnoreAttribute()]
  27.         public ItemChoiceType ItemElementName
  28.         {
  29.             get
  30.             {
  31.                 return this.itemElementNameField;
  32.             }
  33.             set
  34.             {
  35.                 this.itemElementNameField = value;
  36.             }
  37.         }
  38.     }
  39.  
  40.     [System.SerializableAttribute()]
  41.     [System.Xml.Serialization.XmlTypeAttribute(Namespace = "https://blabla", IncludeInSchema = false)]
  42.     public enum ItemChoiceType
  43.     {
  44.         Choose1,
  45.         Choose2,
  46.     }

Äàñò ïðèìåðíî ñëåäóþùþþ ñòðóêòóðó xsd, â êîòîðîé âîïðåêè íàøåé âîëè âèäà XmlIgnore äîïîëíèòåëüíîå ïîëå âñåòàêè ïîìåùàåòñÿ â âûäà÷ó:
Copy Source | Copy HTML
  1. <xs:complexType name="ClassName">
  2. <xs:sequence>
  3. <xs:element name="itemElementNameField" type="tns:ItemChoiceType"/>
  4. <xs:element name="itemField" nillable="true" type="xs:string"/>
  5. </xs:sequence>
  6. </xs:complexType>
  7. <xs:element name="ClassName" nillable="true" type="tns:ClassName"/>
  8. <xs:simpleType name="ItemChoiceType">
  9. <xs:restriction base="xs:string">
  10. <xs:enumeration value="Choose1"/>
  11. <xs:enumeration value="Choose2"/>
  12. </xs:restriction>
  13. </xs:simpleType>

Ðåøåíèå ýòîé ïðîáëåìû êðîåêòñÿ â çàäàíèè äåôîëòíîãî ñåðèàëàéçåðà ïðè ïîìîùè òýãà XmlSerializerFormatAttribute, âûñòàâëÿåìîãî ó ìåäîòà èíòåðôåéñà WCF ñåðâèñà. Íå çíàÿ ýòîãî ìîæíî äîëãî áèòüñÿ íàä ïîÿâëÿíèåì ëèøíåãî â âûäà÷å SOAP.
Ìåòêè:  

 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó