+2003-12-08 Lluis Sanchez Gual <lluis@ximian.com>
+
+ * SoapReflectionImporter.cs, XmlMembersMapping.cs, XmlReflectionImporter.cs,
+ XmlSchemaImporter.cs, XmlTypeMapElementInfo.cs, XmlTypeMapping.cs:
+ When using rpc format on a web service, members don't need to have any
+ specific namespace. Added a flag for turning namespace check on/off.
+
2003-11-27 Lluis Sanchez Gual <lluis@ximian.com>
* XmlSerializationReader.cs: Generate identifiers for arrays user a counter.
XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
mapping[n] = new XmlMemberMapping (members[n].MemberName, ns, mapMem, true);
}
- XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
+ XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, writeAccessors, mapping);
mps.RelatedMaps = relatedMaps;
mps.Format = SerializationFormat.Encoded;
return mps;
{
}
- internal XmlMembersMapping (XmlMemberMapping[] mapping): this ("", null, false, mapping)
+ internal XmlMembersMapping (XmlMemberMapping[] mapping): this ("", null, false, false, mapping)
{
}
- internal XmlMembersMapping (string elementName, string ns, XmlMemberMapping[] mapping): this (elementName, ns, true, mapping)
+ internal XmlMembersMapping (string elementName, string ns, XmlMemberMapping[] mapping): this (elementName, ns, true, false, mapping)
{
}
- internal XmlMembersMapping (string elementName, string ns, bool hasWrapperElement, XmlMemberMapping[] mapping)
+ internal XmlMembersMapping (string elementName, string ns, bool hasWrapperElement, bool writeAccessors, XmlMemberMapping[] mapping)
{
_elementName = elementName;
_namespace = ns;
_mapping = mapping;
ClassMap map = new ClassMap ();
+ map.IgnoreMemberNamespace = writeAccessors;
foreach (XmlMemberMapping mm in mapping)
map.AddMember (mm.TypeMapMember);
ObjectMap = map;
XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
mapping[n] = new XmlMemberMapping (members[n].MemberName, ns, mapMem, false);
}
- XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
+ XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, false, mapping);
mps.RelatedMaps = relatedMaps;
mps.Format = SerializationFormat.Literal;
return mps;
mapping[n] = ImportMemberMapping (members[n].MemberName, members[n].MemberType.Namespace, td);\r
}\r
BuildPendingMaps ();\r
- return new XmlMembersMapping (name, ns, hasWrapperElement, mapping);\r
+ return new XmlMembersMapping (name, ns, hasWrapperElement, false, mapping);\r
}\r
\r
public XmlMembersMapping ImportEncodedMembersMapping (string name, string ns, SoapSchemaMember member)\r
XmlTypeMapping _mappedType;
TypeData _type;
bool _wrappedElement = true;
-
+
public XmlTypeMapElementInfo (XmlTypeMapMember member, TypeData type)
{
_member = member;
XmlTypeMapMemberAnyAttribute _defaultAnyAttribute;\r
XmlTypeMapMemberNamespaces _namespaceDeclarations;\r
XmlTypeMapMember _xmlTextCollector;\r
+ bool _ignoreMemberNamespace;\r
\r
public void AddMember (XmlTypeMapMember member)\r
{\r
{\r
XmlTypeMapMemberAttribute atm = (XmlTypeMapMemberAttribute)member;\r
if (_attributeMembers == null) _attributeMembers = new Hashtable();\r
- string key = atm.AttributeName + "/" + atm.Namespace;\r
+ string key = BuildKey (atm.AttributeName, atm.Namespace);\r
if (_attributeMembers.ContainsKey (key))\r
throw new InvalidOperationException ("The XML attribute named '" + atm.AttributeName + "' from namespace '" + atm.Namespace + "' already present in the current scope. Use XML attributes to specify another XML name or namespace for the attribute.");\r
_attributeMembers.Add (key, member);\r
ICollection elemsInfo = ((XmlTypeMapMemberElement)member).ElementInfo;\r
foreach (XmlTypeMapElementInfo elem in elemsInfo)\r
{\r
- string key = elem.ElementName+"/"+elem.Namespace;\r
+ string key = BuildKey (elem.ElementName, elem.Namespace);\r
if (_elements.ContainsKey (key)) \r
throw new InvalidOperationException ("The XML element named '" + elem.ElementName + "' from namespace '" + elem.Namespace + "' already present in the current scope. Use XML attributes to specify another XML name or namespace for the element.");\r
_elements.Add (key, elem);\r
public XmlTypeMapMemberAttribute GetAttribute (string name, string ns)\r
{\r
if (_attributeMembers == null) return null;\r
- return (XmlTypeMapMemberAttribute)_attributeMembers[name + "/" + ns];\r
+ return (XmlTypeMapMemberAttribute)_attributeMembers [BuildKey(name,ns)];\r
}\r
\r
public XmlTypeMapElementInfo GetElement (string name, string ns)\r
{\r
if (_elements == null) return null;\r
- return (XmlTypeMapElementInfo)_elements[name + "/" + ns];\r
+ return (XmlTypeMapElementInfo)_elements [BuildKey(name,ns)];\r
}\r
\r
public XmlTypeMapElementInfo GetElement (int index)\r
return _elementsByIndex [index];\r
}\r
\r
+ private string BuildKey (string name, string ns)\r
+ {\r
+ if (_ignoreMemberNamespace) return name;\r
+ else return name + " / " + ns;\r
+ }\r
+ \r
public ICollection AllElementInfos\r
{\r
get { return _elements.Values; }\r
}\r
\r
+ \r
+ public bool IgnoreMemberNamespace\r
+ {\r
+ get { return _ignoreMemberNamespace; }\r
+ set { _ignoreMemberNamespace = value; }\r
+ }\r
\r
public XmlTypeMapMember FindMember (string name)\r
{\r