2 // XmlTypeMapMemberElement.cs:
5 // Lluis Sanchez Gual (lluis@ximian.com)
7 // (C) 2002, 2003 Ximian, Inc. http://www.ximian.com
11 using System.Collections;
13 namespace System.Xml.Serialization
15 // XmlTypeMapMemberElement
16 // A member of a class that must be serialized as an XmlElement
18 internal class XmlTypeMapMemberElement: XmlTypeMapMember
20 XmlTypeMapElementInfoList _elementInfo;
22 bool _isTextCollector;
24 public XmlTypeMapMemberElement()
28 public XmlTypeMapElementInfoList ElementInfo
32 if (_elementInfo == null) _elementInfo = new XmlTypeMapElementInfoList ();
35 set { _elementInfo = value; }
38 public string ChoiceMember
40 get { return _choiceMember; }
41 set { _choiceMember = value; }
44 public XmlTypeMapElementInfo FindElement (object ob, object memberValue)
46 if (_elementInfo.Count == 1)
47 return (XmlTypeMapElementInfo) _elementInfo[0];
48 else if (_choiceMember != null)
50 string choiceValue = GetValue (ob, _choiceMember).ToString();
51 foreach (XmlTypeMapElementInfo elem in _elementInfo)
52 if (elem.ChoiceValue == choiceValue) return elem;
56 if (memberValue == null)
57 return (XmlTypeMapElementInfo) _elementInfo[0];
58 Type type = memberValue.GetType();
59 foreach (XmlTypeMapElementInfo elem in _elementInfo)
60 if (elem.TypeData.Type == type) return elem;
65 public bool IsXmlTextCollector
67 get { return _isTextCollector; }
68 set { _isTextCollector = value; }
72 // XmlTypeMapMemberList
73 // A member of a class that must be serialized as a list
75 internal class XmlTypeMapMemberList : XmlTypeMapMemberElement
77 public XmlTypeMapping ListTypeMapping
79 get { return ((XmlTypeMapElementInfo) ElementInfo[0]).MappedType; }
82 public string ElementName
84 get { return ((XmlTypeMapElementInfo) ElementInfo[0]).ElementName; }
87 public string Namespace
89 get { return ((XmlTypeMapElementInfo) ElementInfo[0]).Namespace; }
93 // XmlTypeMapMemberFlatList
94 // A member of a class that must be serialized as a flat list
96 internal class XmlTypeMapMemberExpandable : XmlTypeMapMemberElement
100 public int FlatArrayIndex
102 get { return _flatArrayIndex; }
103 set { _flatArrayIndex = value; }
107 internal class XmlTypeMapMemberFlatList : XmlTypeMapMemberExpandable
111 public ListMap ListMap
113 get { return _listMap; }
114 set { _listMap = value; }
118 internal class XmlTypeMapMemberAnyElement : XmlTypeMapMemberExpandable
120 public bool IsElementDefined (string name, string ns)
122 foreach (XmlTypeMapElementInfo elem in ElementInfo)
124 if (elem.ElementName == "") // Default AnyElementAttribute
127 if (elem.ElementName == name && elem.Namespace == ns)
133 public bool IsDefaultAny
137 foreach (XmlTypeMapElementInfo elem in ElementInfo)
139 if (elem.IsUnnamedAnyElement)
147 internal class XmlTypeMapMemberAnyAttribute: XmlTypeMapMember